Saya pikir ini sangat sederhana.
Solusi 1(Inferior, tidak direkomendasikan)
Cara Anda ZSCAN MySet 0 MATCH Id:92 count 1
tidak berhasil karena string yang disimpan adalah "{\"Id\":\"92\"...
bukan "{\"Id:92\"...
. String telah diubah ke format lain. Jadi coba gunakan MATCH Id\":\"64
atau sesuatu seperti itu untuk mencocokkan data serial json di redis. Saya tidak terbiasa dengan json.net, jadi string yang sebenarnya bisa Anda temukan.
Omong-omong, saya harus bertanya apakah Anda melakukan ZSCAN MySet 0 MATCH Id:92 count 1
mengembalikan kursor? Saya menduga Anda menggunakan ZSCAN
dengan cara yang salah.
Solusi 2(Lebih baik, sangat disarankan)
ZSCAN
bagus ketika set yang Anda urutkan tidak besar dan Anda tahu cara menghemat waktu pulang pergi jaringan dengan transaksi Lua Redis. Ini masih membuat operasi "cari berdasarkan ID" O(n). Oleh karena itu, solusi yang lebih baik adalah dengan mengubah model data Anda dengan cara berikut:
ubah set yang diurutkan dari
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
untuk
# Score Value
0 1443476076 Id:92
1 1443482969 Id:11
Pindahkan data detail lainnya ke set kunci jenis hash lainnya:
# Key field-value field-value ...
0 Id:92 Ref-7ADT DTime-1443476076 ...
1 Id:11 Ref-7ADT DTime-1443476076 ...
Kemudian, Anda mencari berdasarkan id dengan melakukan hgetall id:92
. Untuk kueri rentang menurut tanggal, Anda perlu melakukan ZRANGEBYSCORE sortedset mindate maxdate
lalu hgetall
setiap id satu per satu. Anda sebaiknya menggunakan lua untuk membungkus perintah ini menjadi satu dan itu akan tetap super cepat!
Data dalam database NoSql perlu diatur dengan cara yang berlebihan seperti di atas. Ini mungkin membuat beberapa operasi biasa melibatkan lebih dari satu perintah dan bolak-balik, tetapi dapat ditangani oleh fitur lua redis. Saya sangat merekomendasikan fitur lua redis, karena ia membungkus perintah ke dalam satu jaringan bolak-balik, yang semuanya dieksekusi di sisi server redis dan bersifat atomik dan super cepat!
Balas jika ada yang tidak Anda ketahui