redis的list數據類型相關命令介紹及使用
list列表簡介
- list是簡單的字符串列表(說通俗點,存儲的還是字符串),按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊),個列表最多可以包含^32-1個元素(每個列表超過40億個元素)。
- Redis中的list和Java中的LinkedList很像,底層都是一種鏈表結構,list的插入和刪除操作非常快,時間復雜度為 0(1),不像數組結構插入、刪除操作需要移動數據。像歸像,但是redis中的list底層可不是一個雙向鏈表那麼簡單。
- 當數據量較少的時候它的底層存儲結構為一塊連續內存,稱之為ziplist(壓縮列表),它將所有的元素緊挨著一起存儲,分配的是一塊連續的內存;當數據量較多的時候將會變成quicklist(快速鏈表)結構。
- 可單純的鏈表也是有缺陷的,鏈表的前後指針prev和next會占用較多的內存,會比較浪費空間,而且會加重內存的碎片化。在redis 3.2之後就都改用ziplist+鏈表的混合結構,稱之為quicklist(快速鏈表)。
常用命令
添加命令
lpush key value
從左邊插入元素(將一個或多個值插入到列表頭部)
127.0.0.1:6379> lpush ids 1 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 127.0.0.1:6379> lpush ids 2 (integer) 2 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1"
rpush key value
從右邊插入元素(將一個或多個值插入到列表的尾部(最右邊))
127.0.0.1:6379> rpush ids 3 (integer) 3 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "3"
linsert key BEFORE|AFTER pivot value
向某個元素前/後插入元素,返回結果為當前列表長度,註意列表不存在或者指定元素不存在列表中時,都將不執行任何操作。
//元素3前插入0 127.0.0.1:6379> linsert ids before 3 0 (integer) 4 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" //元素3後插入0 127.0.0.1:6379> linsert ids after 3 4 (integer) 5 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" 5) "4"
查詢命令
lrange key start end
獲取列表中指定范圍內的元素列表;若start值大於列表end值則返回空列表
如上已經展示過瞭
lindex key index
獲取列表指定索引下標的元素
127.0.0.1:6379> lindex ids 0 "2" 127.0.0.1:6379> lindex ids -1 "4"
llen key
獲取列表長度;列表不存在則返回0
127.0.0.1:6379> llen ids (integer) 5
彈出/刪除命令
lpop key
從列表左側彈出元素並返回頭部元素
127.0.0.1:6379> lpop ids "2" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3" 4) "4"
rpop key
從列表右側彈出元素並返回尾部元素
127.0.0.1:6379> rpop ids "4" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3"
lrem key count value
從列表中找到等於value的元素進行刪除,根據count的不同分為三種情況:
count > 0,從表頭開始向表尾,移除數量為count個元素;
count < 0,從表尾開始向表頭,移除數量為count的絕對值個元素;
count = 0,移除表中所有與 value 相等的值
127.0.0.1:6379> lrem ids 0 3 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0"
ltrim key start end
對一個列表進行修剪(trim),就是說,讓列表隻保留指定區間內的元素,不在指定區間之內的元素都將被刪除
127.0.0.1:6379> ltrim ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "1"
修改命令
lset key index value
修改指定下標的元素的值設置為value
127.0.0.1:6379> lset ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "0"
阻塞彈出命令
blpop key [key …] timeout
移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時(單位秒)或發現可彈出元素為止
brpop key [key …] timeout
移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止
演示:
開啟三個reids連接窗口,第一個執行blpop ,第二個執行brpop ,第三個執行添加:
可以看到窗口1和2執行完都已經阻塞在這裡,這是因為ids中沒有元素
窗口3執行添加:lpush ids 1 2 3 4 5 6
可以看到窗口1和2立即彈出對應元素:
應用場景
消息隊列:lpop和rpush(或者反過來,lpush和rpop)能實現隊列的功能
朋友圈的點贊列表、評論列表、排行榜:lpush命令和lrange命令能實現最新列表的功能,每次通過lpush命令往列表裡插入新的元素,然後通過lrange命令讀取最新的元素列表。
到此這篇關於redis的list數據類型相關命令介紹及使用的文章就介紹到這瞭,更多相關redis list數據類型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python3操作redis實現List列表實例
- Redis基本數據類型List常用操作命令
- Redis數據庫安裝部署及基本操作詳解
- Redis都做瞭哪些加快速度的設計
- python中使用redis用法詳解