Redis ZSCAN

Redis Zscan



Lelaran Atas Ahli Set Isih

Seperti yang anda semua tahu, set diisih Redis diperoleh daripada set biasa di mana setiap ahli dipesan mengikut nilai skornya dalam tertib menaik. Jika dua atau lebih ahli memegang nilai skor yang sama, mereka disusun mengikut susunan leksikografi. Biasanya, ahli dan markah boleh diambil terus menggunakan arahan ZRANGE. Apabila anda mempunyai set diisih yang besar dengan beribu-ribu ahli, arahan ZRANGE mungkin menyekat pelayan untuk masa yang lama seperti arahan SMEMBERS dan KEYS yang merupakan kelemahan. Jadi, Redis menawarkan arahan khas yang dipanggil ZSCAN yang diperoleh daripada perintah SCAN untuk melelaran ke atas ahli set yang diisih. Memandangkan arahan ZSCAN mewarisi daripada arahan SCAN, hampir semua tingkah laku adalah sama dengan arahan SCAN tujuan umum.







Seperti dalam rajah yang diberikan, arahan SCAN ialah iterator berasaskan kursor. Oleh itu, ia memerlukan satu atau lebih lelaran untuk menyediakan semua item koleksi Redis. Memandangkan perintah ZSCAN mewarisi daripada perintah SCAN induk, tingkah lakunya adalah sama. Dalam panduan ini, sintaks dan kes penggunaan arahan ZSCAN akan dibincangkan secara terperinci.



Perintah ZSCAN

Perintah ZSCAN ialah lelaran berasaskan kursor yang memulakan lelaran dengan kursor ke-0. Selepas itu, dalam setiap lelaran, ia mengembalikan sifar atau lebih ahli set yang diisih bersama-sama dengan kursor seterusnya yang harus digunakan sebagai kursor untuk panggilan arahan berikut. Jika kursor yang dikembalikan ialah 0 selepas satu atau lebih lelaran, ini bermakna proses pengimbasan telah tamat. Semua ahli set yang diisih dikembalikan pada ketika ini. Proses ini dipanggil lelaran penuh. Seperti yang anda lihat, arahan ZSCAN mengekalkan keadaannya hanya menggunakan kursor yang membawa kepada kesedaran keadaan terhad. Oleh itu, kelemahan berikut dikaitkan dengan arahan ZSCAN.



  • Elemen yang sama mungkin kembali dalam berbilang lelaran.
  • Jika ahli tidak hadir pada permulaan proses pengimbasan, terdapat kebarangkalian untuk tidak mengembalikan ahli tersebut semasa lelaran penuh.

Di samping itu, tiada jaminan pada kiraan ahli yang dikembalikan. Dalam sesetengah kes, jika set yang diisih adalah sangat kecil, semua ahli mungkin dikembalikan dalam lelaran pertama. Kerana Redis menggunakan format pengekodan padat peruntukan tunggal khas untuk menahan ahli sehingga bilangan item maksimum dicapai. Perintah ZSCAN hanya dapat mengembalikan kursor jika struktur data yang diimbas diwakili sebagai jadual cincang.





Sintaks:
Perintah ZSCAN menggunakan sintaks yang hampir sama dengan perintah SCAN kecuali ia menerima kunci set yang diisih sebagai argumen pertama. Sintaks arahan dengan hujah yang dibenarkan adalah seperti berikut:

ZSCAN sorted_set_key cursor [ Corak PADAN ] [ COUNT ahli_kiraan ]

sorted_set_key : Kunci set yang diisih.
Kursor : Nilai kursor bermula dari 0 dan berakhir pada 0 jika ia adalah lelaran penuh.



Argumen berikut adalah pilihan:

PERLAWANAN : Corak untuk dipadankan apabila mendapatkan semula elemen dalam setiap lelaran. Hanya ahli yang sepadan dikembalikan.
COUNT : Anggaran bilangan ahli yang akan dikembalikan dalam setiap lelaran.

Set hasil yang dikembalikan setiap lelaran mengandungi beberapa elemen. Bahagian pertama ialah integer tidak bertanda 64-bit yang mewakili kursor untuk dihantar ke panggilan seterusnya. Bahagian seterusnya ialah susunan ahli dan markah yang berkaitan.

Gunakan Kes 1 ā€“ Dapatkan Semua Ahli dan Misi Selesai Permainan Dalam Talian Mereka

Katakan syarikat permainan dalam talian mengekalkan papan pendahulu menggunakan set diisih Redis. Memandangkan pengguna besar sedang giat bermain permainan ini, mereka memerlukan cara untuk mendapatkan semula setiap pemain dan markah yang berkaitan mereka iaitu bilangan misi yang telah selesai. Ia adalah satu kemestian untuk melakukan pengambilan semula tanpa menyekat pelayan. Jadi, cadangannya ialah menggunakan arahan ZSCAN seperti berikut:

Mula-mula, kami mencipta set yang diisih dengan beberapa pemain dan bilangan misi yang lengkap.

zadd Leaderboard 12 Pemain6:John 4 Pemain2: Mary 22 Pemain1:Patel lima belas pemain: sebelas 23 Pemain5: Ann 30 Pemain7:Keras 23 Pemain12:abby dua Pemain13:Nicky 6 Pemain9: Jeremy 7 Pemain45:Kina

Sekarang, kita boleh mengulangi ahli set yang diisih seperti berikut:

zscan Leaderboard 0

Pengeluaran:

Nilai kursor ialah 0 dalam set hasil yang dikembalikan yang bermaksud bahawa semua ahli dikembalikan pada penghujung lelaran pertama. Dalam kes ini, kerana bilangan ahli adalah kecil, Redis mewakili ahli ini menggunakan pengekodan padat peruntukan tunggal. Oleh itu, sehingga saiz pek maksimum atau bilangan ahli dicapai, arahan itu mengembalikan semua ahli dalam set yang diisih. Ini dipanggil lelaran penuh. Kerana pada penghujung lelaran pertama, kami menerima kesemua sepuluh ahli dan markah mereka. Jika kita mempunyai ratusan ahli, ia diwakili sebagai jadual cincang dalam ingatan. Jadi, diperlukan beberapa lelaran untuk mengembalikan semua ahli.

Parameter COUNT boleh digunakan untuk mengehadkan bilangan ahli yang dikembalikan dalam lelaran. Secara lalai, hujah ini ditetapkan kepada 10. Jika set yang diisih terdiri daripada beratus-ratus ahli, ia diwakili oleh jadual cincang dalam ingatan. Jadi, bilangan ahli yang dikembalikan adalah sekitar sepuluh setiap lelaran. Nilai argumen COUNT diabaikan jika set diisih terlalu kecil.

Use Case 2 ā€“ Ambil Pemain Yang Namanya Bermula dengan Huruf ā€œJā€

Perintah ZSCAN boleh digunakan untuk menapis ahli yang dikembalikan berdasarkan padanan corak. Dalam kes itu, hujah MATCH perlu ditentukan.

Mari gunakan contoh yang sama daripada kes penggunaan sebelumnya. Keperluan adalah untuk mengambil pemain yang namanya bermula dengan huruf 'J'. Ia hanya untuk melaksanakan ciri hebat seterusnya yang berkaitan dengan permainan. Argumen MATCH boleh ditentukan seperti berikut:

zscan Leaderboard 0 perlawanan * J *

Ini sepatutnya mengembalikan dua ahli yang namanya Jeremy dan John.

Kesimpulan

Ringkasnya, arahan ZSCAN digunakan untuk mengulangi ahli dan markah set diisih Redis. Perintah ini berkelakuan sama seperti perintah SCAN, kecuali perintah ZSCAN menerima kunci yang ditetapkan sebagai argumen pertama. Seperti yang dibincangkan dalam kes penggunaan, arahan ZSCAN boleh digunakan dalam cara yang berbeza dengan menentukan argumen MATCH dan COUNT di mana anda boleh mendapatkan semula ahli dan markah berkaitan yang sepadan dengan corak tertentu dan mengehadkan kiraan ahli yang dikembalikan setiap lelaran. Secara keseluruhan, arahan ZSCAN boleh berguna apabila mendapatkan semula ahli set yang diisih tanpa menyekat pelayan atau klien.