Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan pelaksanaan dalaman koleksi yang dipesan dalam Redis

Bagaimana untuk melaksanakan pelaksanaan dalaman koleksi yang dipesan dalam Redis

WBOY
WBOYke hadapan
2023-05-26 19:25:39978semak imbas

Pelaksanaan dalaman set tertib

Terdapat dua pelaksanaan dalaman yang boleh digunakan untuk set tertib iaitu senarai termampat (ziplist) dan senarai langkau (skiplist). Seterusnya, kita akan mengetahui lebih lanjut mengenai setiap satu secara terperinci.

Menggunakan senarai termampat sebagai pelaksanaan dalaman

Apabila bilangan elemen dalam set tersusun kurang daripada zset-max-ziplist-entries (lalai ialah 128), dan panjang setiap ahli elemen adalah kurang daripada zset-max-ziplist-value (lalai ialah 64 bait), senarai termampat digunakan sebagai pelaksanaan dalaman set yang diisih.

Setiap elemen set terdiri daripada dua nod senarai termampat yang rapat, di mana nod pertama menyimpan ahli elemen dan nod kedua menyimpan cawangan elemen. Dengan menyusun elemen dalam senarai dimampatkan bersama-sama mengikut susunan saiz skor, penggunaan ruang memori boleh dikurangkan dengan berkesan.

Sebagai contoh, kami menggunakan perintah zadd untuk mencipta set tertib yang dilaksanakan dengan senarai termampat:

127.0.0.1:6379> zadd one-more-zset 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> zrange one-more-zset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> object encoding one-more-zset
"ziplist"

Menggunakan senarai langkau sebagai pelaksanaan dalaman

Apabila diisih Apabila bilangan elemen dalam set lebih besar daripada atau sama dengan zset-max-ziplist-entries (lalai ialah 128), atau panjang setiap ahli elemen lebih besar daripada atau sama dengan zset-max-ziplist-value (lalai ialah 64 bait), senarai lompat ialah digunakan sebagai pelaksanaan dalaman set yang diperintahkan.

Pada masa ini, set yang ditempah sebenarnya mengandungi dua struktur, satu meja lompat dan satu lagi jadual hash.

Dalam senarai lompat, semua elemen disusun mengikut tertib dari kecil ke besar. Penunjuk object dalam nod senarai lompatan menghala ke objek rentetan ahli elemen dan score menyimpan skor elemen. Melalui jadual lompat, Redis boleh melakukan julat skor, kedudukan dan operasi lain dengan pantas pada set yang dipesan.

Dalam jadual cincang, pemetaan daripada ahli elemen kepada skor elemen dibuat untuk set tertib. Dalam pasangan nilai kunci, kunci ialah objek rentetan dan menunjuk kepada ahli elemen, manakala nilai memegang skor elemen. Melalui jadual cincang, Redis boleh mencari skor elemen tertentu dengan cepat.

Walaupun set diisih menggunakan kedua-dua jadual langkau dan jadual cincang, kedua-dua struktur data menggunakan penunjuk untuk berkongsi ahli dan markah dalam elemen, tanpa pembaziran memori tambahan.

Sebagai contoh, kami menggunakan perintah zadd untuk mencipta set tertib yang dilaksanakan sebagai senarai langkau:

127.0.0.1:6379> zadd one-more-zset 1 long-long-long-long-long-long-long-long-long-long-long-long-long-long
(integer) 1
127.0.0.1:6379> zrange one-more-zset 0 -1
1) "long-long-long-long-long-long-long-long-long-long-long-long-long-long"
127.0.0.1:6379> object encoding one-more-zset
"skiplist"

Penukaran yang dilaksanakan secara dalaman

Apabila set tersusun Apabila dimampatkan list digunakan sebagai pelaksanaan dalaman, dan ahli elemen yang lebih panjang ditambahkan pada set tertib, atau apabila terdapat terlalu banyak elemen dalam set tertib, set tertib akan ditukar kepada senarai lompat sebagai pelaksanaan dalaman . Set tersusun menggunakan senarai dimampatkan kerana pelaksanaan dalaman tidak ditukar kepada melangkau senarai.

Sebagai contoh, kami mula-mula mencipta set tertib dengan senarai termampat sebagai pelaksanaan dalamannya:

127.0.0.1:6379> zadd one-more-zset 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> zrange one-more-zset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> object encoding one-more-zset
"ziplist"

Kemudian, tambahkan elemen dengan ahli yang lebih panjang padanya, yang ditukar kepada senarai Jump sebagai pelaksanaan dalaman:

127.0.0.1:6379> zadd one-more-zset 4 long-long-long-long-long-long-long-long-long-long-long-long-long-long
(integer) 1
127.0.0.1:6379> zrange one-more-zset 0 -1
1) "one"
2) "two"
3) "three"
4) "long-long-long-long-long-long-long-long-long-long-long-long-long-long"
127.0.0.1:6379> object encoding one-more-zset
"skiplist"

Kemudian, elemen ahli yang lebih panjang dialih keluar daripada set tertib tetap menggunakan senarai lompat sebagai pelaksanaan dalaman:

127.0.0.1:6379> zrem one-more-zset long-long-long-long-long-long-long-long-long-long-long-long-long-long
(integer) 1
127.0.0.1:6379> zrange one-more-zset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> object encoding one-more-zset
"skiplist"

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pelaksanaan dalaman koleksi yang dipesan dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Apakah operasi API biasa redis?Artikel seterusnya:Apakah operasi API biasa redis?