Redis基本操做-list

Redis的5種數據結構:string、list、hash、set和zset;
Redis 全部的數據結構都是以惟一的 key 字符串做爲名稱,而後經過這個惟一 key 值來獲取相應的 value 數據。不一樣類型的數據結構的差別就在於 value 的結構不同。java

redis_list.jpg

一、基本操做

  • 列表的存儲結構使用的是鏈表,不是數組;
  • 使用的是雙向鏈表;
  • 隨機定位性能較弱,首尾刪除性能較優;
  • 鏈表元素的位置使用天然數(0,1,2......n-1)表示,也可使用負數,-1表示【倒數第一個】,-n表示【第一個元素】;

二、隊列、堆棧

列表經常使用來做爲異步隊列使用python

經過使用rpush、rpop、lpush、lpop四條指令,在鏈表的表頭和表尾追加或移除元素,能夠將鏈表做爲隊列或堆棧使用;redis

# 右進左出隊列
localhost:0>rpush muscleape go
"1"
localhost:0>rpush muscleape java python
"3"
localhost:0>lpop muscleape
"go"
localhost:0>lpop muscleape
"java"
localhost:0>lpop muscleape 
"python"
# 左進右出隊列
localhost:0>lpush muscleape go java python
"3"
localhost:0>rpop muscleape
"go"
localhost:0>rpop muscleape
"java"
localhost:0>rpop muscleape
"python"

獲取長度數組

localhost:0>rpush muscleape go java python
"3"
localhost:0>llen muscleape
"3"

讀取
lindex 讀取指定位置元素;
lrange 獲取鏈表子元素列表;數據結構

localhost:0>rpush muscleape go java python
"3"
localhost:0>lindex muscleape 1
"java"
localhost:0>lrange muscleape 0 1
 1)  "go"
 2)  "java"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "java"
 3)  "python"

修改元素
lset 在指定位置修改元素異步

localhost:0>rpush muscleape go java python
"3"
localhost:0>lset muscleape 1 PHP
"OK"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "PHP"
 3)  "python"

插入元素
linsert 指定元素,在前或後插入元素性能

localhost:0>linsert muscleape before PHP Java
"4"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"

刪除元素(指定刪除元素的個數及元素的值-可能會有多個值)
lrem 鍵 數量 值ui

localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "java"
 6)  "java"
 7)  "C"
 8)  "C++"
 9)  "java"
 10)  "C#"
 11)  "java"
 12)  "java"
 13)  "java"
localhost:0>lrem muscleape 3 java
"3"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"
 8)  "java"
 9)  "java"
 10)  "java"

定長列表(範圍以外的全部元素都將被移除)
ltrim 鍵 開始位置 結束位置【結束位置<開始位置===>等價於刪除指令】指針

localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"
 8)  "java"
 9)  "java"
 10)  "java"
localhost:0>ltrim muscleape 0 6
"OK"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"

三、快速列表

redis_quicklist.jpg

一、Redis底層存儲的不是一個簡單的LinkedList,而是一種快速鏈表結構;
二、在列表元素較少時,使用一塊連續的內存存儲,ziplist(壓縮列表);
三、數據較多時,改爲quicklist,爲普通鏈表須要附加指針空間太大,比較浪費空間;
四、鏈表和ziplist組合(作個ziplist使用雙向指針串起來使用);code

相關文章
相關標籤/搜索