Saya pikir saran terbaik adalah menghindari berpegang teguh pada model relasional saat mem-porting sesuatu dari RDBMS ke Redis. Dan di luar model, perbedaan penting adalah fokus pada jalur akses data serta struktur data.
Redis tidak menyertakan bahasa kueri (melainkan perintah ala memcached), dan karena itu tidak dapat membalas kueri arbitrer. Jika jalur akses ke data bukan bagian dari struktur data, maka data tidak dapat diambil secara efisien.
Redis bukan toko NoSQL terbaik dalam hal mendukung kueri arbitrer. Misalnya, Anda akan lebih baik dilayani oleh sesuatu seperti MongoDB.
Sekarang, jika Anda benar-benar ingin menerapkan hal-hal Anda dengan Redis, Anda dapat mencoba menggunakan strategi yang mirip dengan mesin penandaan. Catatan Anda dapat disimpan dalam objek hash. Untuk setiap bagian kolom dari kueri arbitrer yang perlu Anda dukung, Anda membuat indeks terbalik menggunakan set.
Misalnya:
# Set up the records: one hash object per record
hmset user:1 name Bilbo type Hobbit job None
hmset user:2 name Frodo type Hobbit job None
hmset user:3 name Gandalf type Maiar job Wizard
hmset user:4 name Aragorn type Human job King
hmset user:5 name Boromir type Human job Warrior
# Set up the indexes: one set per value per field
sadd name:Bilbo 1
sadd name:Frodo 2
sadd name:Gandalf 3
sadd name:Aragorn 4
sadd name:Boromir 5
sadd type:Hobbit 1 2
sadd type:Maiar 3
sadd type:Human 4 5
sadd job:None 1 2
sadd job:Wizard 3
sadd job:King 4
sadd job:Warrior 5
# Perform a query: we want the humans who happen to be a king
# We just have to calculate the intersection of the corresponding sets
sinterstore tmp type:Human job:King
sort tmp by nosort get user:*->name get user:*->job get user:*->type
1) "Aragorn"
2) "King"
3) "Human"
Dengan menggabungkan gabungan, persimpangan, perbedaan, kueri yang lebih kompleks dapat diimplementasikan. Untuk nilai non-diskrit, atau untuk kueri berbasis rentang, set terurut (zset) harus digunakan (dan dapat digabungkan dengan set normal).
Metode ini biasanya cukup cepat jika nilainya cukup diskriminan. Harap perhatikan bahwa Anda tidak memiliki fleksibilitas RDBMS (tidak ada ekspresi reguler, tidak ada pencarian awalan, kueri rentang sulit untuk ditangani, dll ...)