目錄
lpush
lpushx
rpush
rpushx
lpop
rpop
rpoplpush 模式
1.語法
lpush key value [value]
2.解析
將乙個或多個值value插入到列表key的表頭
如果有多個value值,那麼各個value值按從左到右的順序依次插入到表頭:比如說,對空列表mylist
執行命令lpush mylist a b c,列表的值將是c,b,a,這等同於原子性地執行lpush mylist a等三個命令
如果key不存在,乙個空列表會被建立並執行lpush操作
當key存在但不是列表型別時,返回乙個錯誤
2.4以前lpush只接受單個value值
3.返回值:
執行lpush命令後,列表的長度
4.例子:
#加入單個元素
lpush student sunny
#加入重複元素
lpush student sunny
lrange student 0 -1
#加入多個元素
lpush student sunny jack sony
lrange student 0 -1
1.語法
lpushx key value
2.解析
將值value插入到列表key的表頭,當且僅當key存在並且是乙個列表
當key不存在時,lpushx什麼也不做
3.返回值:
lpushx命令執行之後,表的長度
4.例子:
#對空列表執行lpushx
llen student
lpushx student sunny //失敗 因為列表為空
#對非空列表執行lpushx
lpush student sunny
lpushx student jack
lrange student 0 -1
1.語法
rpush key value [value...]
2.解析
將乙個或多個值value插入到列表key的表尾(最右邊)
如果有多個value值,那麼各個value值按從左到右的順序依次插入到表尾
比如乙個空列表m執行rpush m a b c,得出的結果列表為a b c,相當於執行三個命令
如果key不存在,乙個空列表會被建立並執行rpush操作
當key存在但不是列表型別是,返回乙個錯誤
2.4以前的rpush命令,只接受單個value值
3.返回值:
執行rpush操作之後,表的長度
4.例子:
#新增單個元素
rpush student sunny
#新增重複元素
rpush student sunny
lrange studeny 0 -1
#新增多個元素
rpush student sunny jack sony
lrange student 0 -1
1.語法
rpushx key value
2.解析
將值value插入到列表key的末尾,當且僅當key存在並且是乙個列表
當key不存在時,rpushx命令什麼也不做
3.返回值:
rpushx命令執行之後,表的長度
4.例子:
#key不存在
llen student
rpushx student sunny //執行失敗 不存在的key
#key存在並且是乙個非空列表
rpush student sunny
rpushx student jack
lrange student 0 -1
1.語法
lpop key
2.解析
移除並返回列表key的元素頭
3.返回值:
列表的頭元素,當key不存在,返回nil
4.例子:
llen student
rpush student sunny
rpush student jack
lpop student
1.語法
rpop key
2.解析
移除並返回列表key的尾元素
3.返回值:
列表的尾元素,當key不存在時,返回nil
4.例子:
rpush student sunny
rpush student jack
rpush student sony
rpop student
lrange student 0 -1
1.語法
rpoplpush source destination
2.解析
命令rpoplpush在乙個原子時間內,執行以下兩個動作:
將列表source中的最後乙個元素彈出(尾元素),並返回給客戶端
將source彈出的元素插入到列表destination,作為destination列表的頭元素
舉個例子:
有兩個列表source和desitination,source列表有元素a,b,c,destination有元素想,x,y,z
執行rpoplpush之後,source列表元素包含a,b,destination有c,x,y,z,並且返回元素c給客戶端
如果source不存在,值nil被返回,並且不執行其他動作
如果source和destination相同,則列表中的表尾元素被移動到表頭,並返回該元素,可以把這種情況視作列表的旋轉操作
3.返回值:
被彈出的元素
4.例子:
#s和d不同
lpush s a b c d
rpoplpush s d
lrange s 0 -1
lrange d 0 -1
#s和d相同
rpush s 1 2 3 4
lrange s 0 -1
rpoplpush s s
lrange s 0 -1
模式:安全的佇列
redis的列表經常被用作佇列,用於不同程式之間有序地交換資訊.乙個客戶d端通過lpush命令將訊息放入佇列中
而另乙個客戶端通過rpop或者brpop命令取出佇列中等待時間最長的訊息
注意的是,上面的佇列方法是不可靠的,因為在這個過程中,乙個客戶端可能在取出乙個訊息之後崩潰,
而未處理完的訊息也因此丟失。
使用rpoplpush命令可以解決這個問題,因為它不僅返回乙個訊息,同時將這個訊息新增到另乙個備份列表當中
如果一切正常的話,當乙個客戶端完成某個訊息的處理之後,可以用lrem命令將這個訊息從備份中刪除
最後,還可以新增乙個客戶端專門用於監視備份表,它自動地將超過一定處理時限的訊息重新放入到佇列中區,這樣不會丟失任何笑了
模式:迴圈列表
通過使用相同的key作為rpoplpush命令的兩個引數,客戶端可以用乙個接乙個地獲取列表元素的方式
取得列表的所有元素,而不必像lrange命令那樣一下子將所有列表元素都從伺服器傳送到客戶端
以上兩個模式設定在以下的兩個情況下也能正常的工作:
有多個客戶端同時對乙個列表進行旋轉,他們獲取不同的元素,直到所有元素都被讀取完 之後從頭 開始
有客戶端在向列表尾部(右邊)新增新元素
這個模式使得我們可以很容易實現這一類系統:有n個客戶端,需要連續不斷的對一些元素進行處理
而且處理的過程必須盡可能的快.乙個典型的例子就是伺服器的監控程式,他們需要在短時間內
,並行的檢查一組**,確保他們的可訪問性。
redis有序集合系列之一
目錄 zend zscore zincrby zcard zcount 1.語法 zend key score member score member score member 2.解析 將乙個或多個member元素及其score值加入到有序集key當中。如果某個member已經是有序集的成員,那麼...
redis列表底層實現之一 鍊錶
注意標題中的 之一 那麼什麼情況下,列表會使用鍊錶作為其資料結構呢?答案就是 列表鍵包含了大量的元素,或者列表中包含的元素都是比較長的字串。ok,由於鍊錶大家都比較熟悉,接下來就直接給出鍊錶和鍊錶節點的實現。鍊錶節點 typedef struct listnode listnode 鍊錶 typed...
Redis系列 列表 List (八)
redis列表是簡單的字串列表,按照插入順序排序。你可以新增乙個元素導列表的頭部 左邊 或者尾部 右邊 乙個列表最多可以包含 232 1 個元素 4294967295,每個列表超過40億個元素 redis 127.0 0.1 6379 lpush runoobkey redis integer 1 ...