「進擊Redis」六、Redis List運用場景、API解析
不懂就問
靈魂拷問之 ☞光頭洗頭用洗面奶還是洗髮水?
好哥哥們把腦洞留在評論區吧。
概述
列表(list)型別是用來儲存多個有序的字串,如下圖,三個元素從左到右組成了一個有序的列表,列表中的每個字串稱為元素(element),一個列表最多可以儲存 2 的 32 次方減 1 個元素。好哥哥們看這圖很像什麼呢,是不是類似於 JAVA 中的 LinkedList(怎麼又是 JAVA)。
在 Redis 中,可以對列表兩端插入(push)和彈出(pop),還可以獲取指定範圍的元素列表、獲取指定索引下標的元素等。列表是一種比較靈活的資料結構,它可以充當棧和佇列的角色,在實際開發上有很多應用場景。
1 命令
主要圍繞下面五個操作來說,好哥哥們,看圖:
1.1 新增操作
## 從右邊插入元素(right)
rpush key value [value ...]
## 下面程式碼從右向左插入元素
rpush city:guangdong guangzhou chaoshan shenzhen
## 從左邊插入元素(left)
lpush key value [value ...]
## 下面程式碼從左向右插入元素
rpush city:guangdong shenzhen chaoshan guangzhou
## 向某個元素前或者後插入元素, linsert命令會從列表中找到等於(pivot)的元素,在其前(before)或者後(after)插入一個新的元素(value)
linsert key before|after pivot value
## 在潮汕前插入一個元素zhongshan,返回的是列表長度
linsert city:guangdong before chaoshan zhongshan
1.2 查詢
## 獲取指定範圍內的元素列表。索引下標從左到右分別是0到N-1,但是從右到左分別是-1到-N。lrange中的end選項包含了自身,這個和很多程式語言不包含end不太相同。
lrange key start end
## 返回的就是從1到包含3的列表,zhongshan chaoshan guangzhou
lrange city:guangdong 1 3
## 獲取列表指定索引下標的元素
lindex key index
## 獲取city:guangdong索引為1的元素 guangzhou
lindex city:guangdong 1
## 獲取列表長度
llen key
## 獲取city:guangdong的長度,返回4
llen city:guangdong
1.3 刪除
## 從列表左側彈出元素
lpop key
## 從左側刪除一個元素
lpop city:guangdong
## 從列表右側彈出
rpop key
## 從右側刪除一個元素
rpop city:guangdong
## 刪除指定元素。從列表中找到等於value的元素進行刪除。
## 如果count>0,從左到右,刪除最多count個元素。如果count=0,刪除所有。
## 如果count<0,從右到左,刪除最多count絕對值個元素。
lrem key count value
## 比如我們的列表為a a a guangzhou zhongshan chaoshan guangzhou,執行下面命令結果為guangzhou zhongshan chaoshan guangzhou
lrem city:guangdong 3 a
## 按照索引範圍修剪列表,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
ltrim key start end
## 下面操作會只保留列表city:guangdong第2個到第4個元素
ltrim city:guangdong 1 3
1.4 修改
## 修改指定索引下標的元素
lset key index newValue
## 將第一個元素修改為beijing
lset city:guangdong 0 beijing
1.5 阻塞操作
## 阻塞式彈出,blpop和brpop是lpop和rpop的阻塞版本
## key[key...]:多個列表的鍵,timeout:阻塞時間(單位:秒)
## 注意點一、如果是多個鍵,那麼brpop會從左至右遍歷鍵,一旦有一個鍵能彈出元素,客戶端立即返回
## 注意點二、如果多個客戶端對同一個鍵執行brpop,那麼最先執行brpop命令的客戶端可以獲取到彈出的值。
blpop key [key ...] timeout
brpop key [key ...] timeout
## 如果裡裡列表中沒有元素,阻塞三秒後返回,如果設定為0,則會一直阻塞,如果此期間新增了資料element1,客戶端立即返回。
## 列表不為空:客戶端會立即返回
brpop city:guangdong 3
2 時間複雜度
老規矩,看圖不說話
3 使用場景
- 訊息佇列,通過 lpush+brpop 命令組合即可實現阻塞佇列。正常是不會這麼玩的。
- 最新列表,List 型別的 lpush 命令和 lrange 命令能實現最新列表的功能,每次通過 lpush 命令往列表裡插入新的元素,然後通過 lrange 命令讀取最新的元素列表,如朋友圈的點贊列表、評論列表。
- 排行榜, List 型別的 lrange 命令可以分頁檢視佇列中的資料, 但是隻有定時計算的排行榜才適合使用 list 型別儲存(實時不行)。
本期就到這啦,有不對的地方歡迎好哥哥們評論區留言,另外 求 關 注 、 求 點 贊 \color{#FF0000}{求關注、求點贊} 求關注、求點贊
相關文章
- Redis作者談Redis應用場景Redis
- redis實用場景Redis
- redis的應用場景Redis
- Redis詳解以及Redis的應用場景Redis
- Redis 應用場景彙總Redis
- Redis常見應用場景Redis
- Redis實際應用場景Redis
- Redis使用場景Redis
- redis應用場景及例項Redis
- Redis系列之(二)——應用場景Redis
- 【Redis場景3】快取穿透、擊穿問題Redis快取穿透
- 聊聊Redis使用場景Redis
- 聊聊 Redis 使用場景Redis
- (六)Redis 訊息佇列 List、StreamsRedis佇列
- Redis都有哪些使用場景Redis
- redis listRedis
- Redis的應用場景及優缺點Redis
- redis資料型別及應用場景Redis資料型別
- Redis應用場景及快取問題Redis快取
- Redis最常見的5種應用場景Redis
- Redis 資料型別及應用場景Redis資料型別
- Redis 知多少 (二)---Redis 基本資料型別及常用應用場景Redis資料型別
- Redis五種資料型別應用場景Redis資料型別
- Redis中7種集合型別應用場景Redis型別
- Redis的資料結構與應用場景Redis資料結構
- Redis的資料結構及應用場景Redis資料結構
- Redis的11種Web應用場景簡介RedisWeb
- Redis最常用的使用場景Redis
- Redis有哪些常用使用場景?Redis
- Redis - 介紹與使用場景Redis
- Redis 中 BitMap 的使用場景Redis
- API介面的運用場景以及獲取方式API
- redis的場景應用多角度簡單分析Redis
- MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景MongoDBRedisSQL
- Redis叢集案例與場景分析Redis
- Redis 資料結構使用場景Redis資料結構
- redis命令之-listRedis
- redis中跳錶的運用及原始碼解析(一)Redis原始碼