2015-03-09 44 views
6

Sẽ rất tuyệt nếu ai đó có thể gợi ý cho tôi về cách tốt nhất để lưu trữ danh sách các đối tượng java trong Redis.Cách tốt nhất để lưu trữ một danh sách các đối tượng java trong Redis

Hiện tại, tôi đang chuyển đổi các đối tượng java thành chuỗi json và lưu trữ các chuỗi đó trong Redis và tôi có một bộ trong Redis để theo dõi tất cả các chuỗi này.

Đối với ví dụ như: -

SET student:1 '{"name":"testOne","stream":computer science}' 
SET student:2 '{"name":"testTwo","stream":electronics}' 
SADD students 1 
SADD students 2 

Vì vậy, khi bao giờ tôi muốn lấy danh sách các sinh viên, lần đầu tiên tôi có được bộ students và sau đó lặp trên nó và nhận được chuỗi json vào những phím.

Chỉ cần tự hỏi liệu có cách nào khác tốt hơn để xử lý trường hợp lưu trữ danh sách đối tượng java vào Redis hay không.

(Tôi đang sử dụng redis làm bộ nhớ cache)

Trả lời

6

Nếu bạn không cần truy vấn đối tượng java của bạn lưu trữ trong redis (đánh chỉ mục, điểm số ...), sau đó bạn có thể chỉ serialize chúng vào một bytearray với một thư viện (ví dụ Kryo) và lưu trữ chúng trong một String trong redis . Lưu ý rằng bạn có thể tuần tự hóa một tập hợp các đối tượng java trong một chuỗi redis, chỉ cần nhớ lớp đó là (loại bộ sưu tập + loại đối tượng) khi bạn muốn deserialize, bạn có thể xác định một tên khóa thông minh cho mục đích này ví dụ.

JSON sẽ sử dụng nhiều không gian hơn và sẽ có nhiều mạng hơn các định dạng đầm lầy nhị phân khác, nếu bạn không cần truy vấn hoặc dữ liệu có thể đọc được bằng redis, thì tốt hơn (và thực hiện nhiều hơn) để lưu trữ dữ liệu nhị phân redis. Lưu ý rằng nếu bạn đang sử dụng thư viện jedis (như bạn đã gắn thẻ nó), bạn có các phương thức trên Jedis dùng các tham số thay vì các chuỗi Java để gửi dữ liệu dưới dạng C-String tới Redis (không mất dữ liệu trong quá trình này).).

3

Redis là nhiều hơn một cửa hàng giá trị khóa đơn giản. Bạn có thể sử dụng bảng băm để lưu trữ dữ liệu có cấu trúc trong redis

HMSET học sinh: 1 tên "testOne" suối "khoa học máy tính" http://redis.io/commands/hmset

để có được tất cả các nội dung của học sinh băm gọi HGETALL: 1
bạn cũng có thể có giá trị duy nhất của Hashes với HGET
VÍ DỤ HGET học sinh: 1 tên

+0

Tôi thực sự đang tìm cách lưu trữ danh sách các đối tượng java và truy xuất chúng khi cần. Ngoài ra tôi muốn giảm thiểu số lượng truy vấn để lấy danh sách vì vậy tôi đã chọn sử dụng các chuỗi json để lưu trữ các đối tượng cho phép tôi sử dụng MGET và nhận tất cả các khóa trong một lần. Nếu tôi sử dụng băm để lưu trữ các đối tượng java của mình, tôi không thể lấy tất cả các phần tử trong danh sách các đối tượng java trong một lần. –

+0

Nếu bạn muốn lưu trữ chúng không được đặt hàng, bạn có thể sử dụng SET để lưu trữ các khóa của băm. Bạn có thể sử dụng tập lệnh LUA để truy xuất chúng trong một lần Sự cố với cách tiếp cận của bạn: -Cập nhật và xóa chỉ có thể ở phía máy khách. -> hỗ trợ đa người dùng kém – Lugg

1

Bạn có thể dễ dàng thực hiện việc này với Redisson. Đây là một khung công tác dựa trên Redis cho Java hỗ trợ nhiều codec phổ biến (Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy và JDK Serialization) và các chế độ kết nối Redis như Cluster, Sentinel, AWS Elasticache.

Dưới đây là một ví dụ làm thế nào để lưu trữ đối tượng Java vào danh sách:

RList<SomeObject> list = redisson.getList("anyList"); 
list.add(new SomeObject(1)); 
list.add(new SomeObject(2)); 

RList giao diện cũng thực hiện giao diện java.util.List. Khá dễ, phải không?

Các vấn đề liên quan