Redis的5種數據結構:string、list、hash、set和zset;
Redis 全部的數據結構都是以惟一的 key 字符串做爲名稱,而後經過這個惟一 key 值來獲取相應的 value 數據。不一樣類型的數據結構的差別就在於 value 的結構不同。java
列表經常使用來做爲異步隊列使用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底層存儲的不是一個簡單的LinkedList,而是一種快速鏈表結構;
二、在列表元素較少時,使用一塊連續的內存存儲,ziplist(壓縮列表);
三、數據較多時,改爲quicklist,爲普通鏈表須要附加指針空間太大,比較浪費空間;
四、鏈表和ziplist組合(作個ziplist使用雙向指針串起來使用);code