Sangat mungkin untuk memodelkan data ini dengan Redis, tetapi Anda perlu memikirkan struktur data DAN jalur akses. Dengan Redis, jalur akses tidak dikelola secara implisit (seperti dengan indeks di RDBMS/MongoDB).
Untuk contoh yang diberikan, Anda dapat memiliki:
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
Menambahkan/menghapus pesan berarti mempertahankan set *:sent dan *:received yang sesuai dengan pengirim dan penerima, selain menambahkan/menghapus objek pesan itu sendiri.
Mengambil pesan yang dikirim atau diterima untuk pengguna tertentu hanyalah perintah SMEMBERS, atau SORT jika Anda ingin mengambil juga properti pesan pada saat yang sama:
# 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
Untuk alasan penggunaan sort, lihat:
- Mendapatkan beberapa nilai kunci dari Redis
- Perlu bantuan untuk membuat konsep di Redis/NoSQL
Catatan 1: dengan Redis lebih baik menggunakan bilangan bulat sebagai kunci daripada UUID atau kode hash (terutama dalam set), karena disimpan dengan cara yang lebih efisien.
Catatan 2: jika Anda perlu memesan pesan, maka daftar harus digunakan alih-alih set. Konsekuensinya hanya pesan terlama yang dapat dihapus, dan hanya pesan baru yang dapat ditambahkan dengan cara yang efisien. Anda mungkin juga akan menambahkan daftar global untuk semua pesan.