Rumah  >  Artikel  >  pangkalan data  >  Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis

Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis

青灯夜游
青灯夜游ke hadapan
2021-12-01 09:53:252169semak imbas

Artikel ini akan membawa anda memahami senarai terpaut dua kali dalam struktur data Redis, dan secara ringkas memperkenalkan penggunaan senarai terpaut dua kali saya harap ia akan membantu semua orang.

Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis

Dalam senarai dalam jenis data Redis, arahan yang biasa digunakan untuk menambah dan memadam data termasuk lpush, rpush, lpop, rpop, di mana l Ia bermakna di sebelah kiri, r bermaksud di sebelah kanan Anda boleh menambah dan memadam operasi di sebelah kiri dan kanan, menunjukkan bahawa ini ialah struktur data dua hala, dan struktur data senarai ialah senarai berganda, serupa dengan. LinekdList di Jawa. [Cadangan berkaitan: Tutorial video Redis]

Senarai terpaut menyediakan keupayaan penyusunan semula nod yang cekap, serta kaedah capaian nod berjujukan Data senarai terpaut boleh diubah suai dengan mengubah suai pra dan petunjuk seterusnya bagi nod .

Bahasa C tidak mempunyai struktur data senarai terpaut terbina dalam, jadi Redis membina struktur senarai terpautnya sendiri.

Struktur data senarai terpaut, senarai terpaut dan nod senarai terpaut

Senarai terpaut terdiri daripada senarai terpaut dan nod senarai terpaut Setiap nod senarai terpaut diwakili oleh adlist.h /listNode struktur :

typedef struct listNode {
    //前置节点
    struct listNode *prev;
    //后置节点
    struct listNode *next;
    // 节点值
    void *value;
} listNode;

Senarai berbilangNod boleh membentuk senarai berganda melalui petunjuk sebelumnya dan seterusnya, seperti yang ditunjukkan dalam tajuk:

Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis

Berbilang senaraiNod boleh membentuk senarai terpaut, Walau bagaimanapun, untuk memudahkan pengurusan, gunakan adlist.h/list untuk mengurus senarai terpaut adalah seperti berikut:

typedef struct list {
    // 列表头结点
    listNode *head;
    // 列表尾结构
    listNode *tail;
    // 节点值复制函数
    void *(*dup)(void *ptr);
    // 节点值释放函数
    void (*free)(void *ptr);
    // 节点值对比函数 
    int (*match)(void *ptr, void *key);
    // 列表节点数量
    unsigned long len;
} list;

struktur senarai menyediakan kepala penunjuk kepala, ekor penunjuk ekor, dan Bilangan nod dikira sebagai len. Rajah berikut menunjukkan senarai terpaut yang terdiri daripada struktur senarai dan tiga nod senaraiNod:

Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis

Ciri-ciri pelaksanaan senarai terpaut Redis diringkaskan seperti berikut:

  • Dwiarah: Nod senarai terpaut mempunyai penuding sebelumnya dan seterusnya, dan setiap data boleh diperoleh melalui penunjuk
  • Kira panjang senarai terpaut dengan pantas: Kira panjang senarai melalui atribut len ​​dalam struktur senarai, dan kerumitan masa ialah O(1)
  • Polymorphism: Nod senarai terpaut menggunakan penunjuk void* untuk menyimpan nod, jadi senarai terpaut menyokong menyimpan pelbagai jenis nilai

Penggunaan senarai terpaut berganda

Kekunci senarai, Terbit dan langgan, pertanyaan perlahan, monitor, dsb.

Ringkasan

  • Artikel ini memperkenalkan struktur data senarai terpaut Senarai terpaut terdiri daripada senarai terpaut dan nod senarai terpaut mempunyai penuding depan dan belakang , jadi senarai terpaut Redis ialah senarai terpaut dua hala
  • Senarai terpaut boleh menyimpan nod kepala dan nod ekor untuk mengurus nodnya sendiri dengan lebih baik boleh mengira dengan cepat panjang senarai terpaut
  • Senarai terpaut melepasi batal* Dan jenis fungsi tetapan yang berbeza, jadi senarai terpaut boleh mempunyai jenis nilai yang berbeza
  • Untuk lebih banyak pengaturcaraan -pengetahuan berkaitan, sila layari:
Pengenalan kepada Pengaturcaraan

! !

Atas ialah kandungan terperinci Mari kita bincangkan secara mendalam tentang senarai pautan berganda dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam