Chắc chắn có thể lập mô hình những dữ liệu này với Redis, nhưng bạn cần phải suy nghĩ về cấu trúc dữ liệu VÀ đường dẫn truy cập. Với Redis, các đường dẫn truy cập không được quản lý ngầm (như với các chỉ mục trong RDBMS / MongoDB).
Đối với ví dụ được cung cấp, bạn có thể có:
user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties
Thêm / xóa một tin nhắn có nghĩa là duy trì các bộ *:đã gửi và *:đã nhận tương ứng với người gửi và người nhận, bên cạnh việc thêm / xóa chính đối tượng tin nhắn.
Việc truy xuất các tin nhắn đã gửi hoặc đã nhận cho một người dùng nhất định chỉ là lệnh SMEMBERS hoặc một SORT nếu bạn muốn truy xuất đồng thời các thuộc tính của tin nhắn:
# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received
# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message
Để biết cơ sở về việc sử dụng sắp xếp, hãy xem:
- Nhận nhiều giá trị chính từ Redis
- Cần trợ giúp về khái niệm trong Redis / NoSQL
Lưu ý 1: với Redis tốt hơn nên sử dụng số nguyên làm khóa thay vì UUID hoặc mã băm (đặc biệt là theo bộ), vì chúng được lưu trữ theo cách hiệu quả hơn.
Lưu ý 2: nếu bạn cần sắp xếp thứ tự các thông báo, thì danh sách phải được sử dụng thay vì tập hợp. Hệ quả là chỉ những tin nhắn cũ nhất mới có thể bị xóa, và chỉ những tin nhắn tập hợp mới có thể được thêm vào một cách hiệu quả. Bạn có thể cũng sẽ thêm một danh sách chung cho tất cả các thư.