Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Redis - Kumpulan yang diurutkan, temukan item berdasarkan nilai properti

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengimplementasikan Redis Cache dengan Django Rest Framework?

  2. Bagaimana cara menyimpan dan mengambil sesi dari Redis

  3. Apa pustaka/metode komunikasi antar-proses node.js yang paling efisien?

  4. Bisakah saya terhubung langsung ke server Redis dari JavaScript yang berjalan di browser?

  5. Azure DataBricks Stream foreach gagal dengan NotSerializableException