redis常用資料型別操作二 列表 (List)
redis列表 (List)
簡介
redis列表是簡單的字串列表,按照插入的順序排序,可以新增一個元素到列表的頭部(左邊)或尾部(右邊)
它底層是一個 雙向連結串列,對兩端的操作效能很高,通過索引下標的操作中間的節點效能會較差。
常用命令
lpush/rpush <key> <value1><value2>.. 從左邊或右邊插入多值操作
lpop/rpop <key> 從左邊/右邊吐出一個值,值在鍵在,值光鍵亡
rpoplpush <key1><key2>: 從<key1>列表右側吐出一個值,插入到<key2>列表左邊
lrange <key> <starr><stop> 按照索引下標獲取元素(從左到右),larnge <key> 0 -1 :0取左邊第一個,-1右邊第一個
lindex<key> <index> 按照索引下標取得元素
llen <key> 獲得列表長度
linsert <key> before/after <value> <newvalue> 在<value>的後面/前面插入<newvalue>
lrem <key> <n> <value>
lset <key> <index> <value> :將列表key下標為index 的值替換成value
資料結構
List 的資料結為連結串列,quicklist
首先在列元素較少的情況下會使用一塊連續的記憶體儲存,這個結構是ziplist,也即是壓縮列表。
它將所有的元素緊挨著一起儲存,分配的是一塊連續的記憶體。
當資料量比較多的時候才會改成quicklist。
因為普通的連結串列需要的附加指標控制元件太大,會比較浪費空間,比如這個列表只儲存int型別的資料,結構上還需要兩個額外的指標,prev 和next
redis將量表和ziplist結合起來組成了quicklist,也就是將多個ziplist使用雙向指標串起來使用,這樣既滿足了快速的插入刪除效能,又不會出現太大的空間冗餘