日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis之链表

發布時間:2025/3/21 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis之链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈表linkedlist

    • 鏈表在Redis中的作用
      • 鏈表節點
      • 鏈表結構
      • 鏈表示意圖
      • 總結 : 鏈表的特點

linkedlist是一種有序的數據結構, 并且增加和刪除效率高,C語言沒有實現這種結果,所以Redis自己實現了這種結構

鏈表在Redis中的作用

  • 在Redis3.0之前中list底層可以用linkedlist來實現(數據少和小), 也可以用ziplist(數據大或者多)實現
  • 在Redis3.0之后, list多用linkedlist和ziplist一起來實現, 叫quicklist(之后的章節會講)

鏈表節點

既然講到了鏈表, 那么其中的節點是如何實現的那么必須要知道, 其實和java中linkedlistNode差不多

typedef struct listNode {struct listNode *prev;struct listNode *next;void *value; } listNode;
  • 一個指向前面節點的prev指針
  • 一個指向后面節點的next指針
  • void* 代表可用存儲任何數據, value域存儲數據

鏈表結構

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;
  • 一個指向頭結點的指針 head(方便插入和刪除)
  • 一個指向尾節點的指針 tail(方便插入和刪除)
  • 復制節點的函數 dup
  • 釋放節點的函數 free
  • 節點對比函數 match
  • 節點數量 len(就不需要去遍歷鏈表來獲取長度以便達到O(1))

鏈表示意圖

下圖就是大概的示意圖, 幫助理解

總結 : 鏈表的特點

1. 雙端 : 獲取某一個節點的前驅和后驅節點的復制度都為O(1)

2. 無環 : head節點的prev和tail節點的next都為NULL, 不會產生環狀

3. 有鏈表長度計數器 : 擁有len字段,可以直接獲取鏈表長度

4. 有表頭節點和表尾節點, 獲取節點復雜度為O(1)

總結

以上是生活随笔為你收集整理的Redis之链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。