Redis 資料結構之List 雙端鍊錶

2021-10-04 05:35:37 字數 793 閱讀 1251

list

鍊錶作為陣列之外的一種常用序列抽象, 是大多數高階語言的基本資料型別, 因為 c 語言本身不支援鍊錶型別, 大部分 c 程式都會自己實現一種鍊錶型別, redis 也不例外 —— 實現了乙個雙端鍊錶結構。在redis中,list的最大長度為2^32-1。

除了實現列表型別以外, 雙端鍊錶還被很多 redis 內部模組所應用:

類似的應用還有很多, 在後續的章節中我們將看到, 雙端鍊錶在 redis 中發揮著重要的作用。

list的定義

typedef

struct listnode listnode;

typedef

struct list list;

迭代器

redis 為雙端鍊錶實現了乙個迭代器 , 這個迭代器可以從兩個方向對雙端鍊錶進行迭代:沿著節點的 next 指標前進,從表頭向表尾迭代;

沿著節點的 prev 指標前進,從表尾向表頭迭代。

typedef

struct listiter listiter;

direction 記錄迭代應該從那裡開始:

redis資料結構之List

在redis中,list型別是按照插入順序排序的字串鍊錶。和資料結構中的普通鍊錶一樣,我們可以在其頭部 left 和尾部 right 新增新的元素。在插入時,如果該鍵並不存在,redis將為該鍵建立乙個新的鍊錶。與此相反,如果鍊錶中所有的元素均被移除,那麼該鍵也將會被從資料庫中刪除。list中可以包...

Redis資料結構之list

lpush rpush 從左邊 右邊插入乙個或多個值,類似推箱子。lpop rpop 從左邊 右邊吐出乙個值。值在鍵在,值光鍵亡 rpoplpush 從列表右邊吐出乙個值,插到列表左邊 lrange 按照索引下標獲得元素 從左到右 lindex 按照索引下標獲得元素 從左到右 llen 獲得列表長度...

Redis資料結構詳解之List(二)

1 redis中list列表的資料插入命令 lpush,rpush,linsert 127.0.0.1 6379 rpush mylist 1 結果為 integer 1 127.0.0.1 6379 rpush mylist 2 結果為 integer 2 127.0.0.1 6379 rpush...