天天看點

Redis清單和集合類型學習

清單類型

Redis中的清單類型時有序清單,而且是雙向連結清單,取頭尾部資料非常快,添加資料的時間複雜度非常的低

向兩端增加元素

Lpush key value [value…]

Rpush key value [value…]

指令示範如下:

Redis清單和集合類型學習

從清單兩端彈出元素(彈出後即被移除)

從左端彈出:Lpop key

從右端彈出:Rpop key

指令示範如下:

Redis清單和集合類型學習

擷取清單中元素的個數

LLen key

示範如上圖

擷取清單片段(不會删除圖檔),左側起點預設為0,右側重點預設為-1

指令: Lrange key start stop

Redis清單和集合類型學習
Redis清單和集合類型學習

删除指定的值

Lrem key count value (count>0,删除從左邊開始值為value的前count個元素;count=0,删除所有值為value的元素,count<0,删除從右邊開始值為value的前-count個元素)

指令示範如下:

Redis清單和集合類型學習

将清單當數組用

擷取指定索引位置的元素值:Lindex key index (相當于數組中的key[index])

設定指定索引位置的元素值:Lset key index value(對key[index]指派)

Redis清單和集合類型學習

删除指定索引外的所有元素

Ltrim key start end (用法跟Lrange相似)

Redis清單和集合類型學習

向清單中插入元素

Linsert key before|after pivot value (Linsert是從左到右查找值為pivot的元素,根據before或者after決定value的插入位置)

指令示範如下:

Redis清單和集合類型學習

從示範中可以看出,插入資料隻在找到的第一個元素處操作

将元素從一個清單轉到另一個清單

指令RpopLpush source destination

很有趣的指令,看起來像是從源清單的右邊彈出元素然後從左邊寫入目的清單

Redis清單和集合類型學習

0從list清單右邊轉移到list1清單左邊了

集合類型

集合裡的元素具有唯一性,不具備有序性,

而清單類型則是具有有序性,不具備唯一性,這是兩者最大的差別。

基本指令:

增加元素 Sadd key member [member…]

删除元素 Srem key member [member…]

擷取全部元素: Smembers key

判斷元素是否存在: Sismember key member

指令示範如下:

Redis清單和集合類型學習

集合間的運算

差集運算 Sdiff key [key…] (相當于key1-key2-key3…)

交集運算 Sinter key [key…] (相當于 key1∩key2∩key3…)

并集運算 Sunion key [key…] (相當于 key1∪key2∪key3…)

指令示範如下:

Redis清單和集合類型學習

運算并儲存結果

Sdiffstore destination key [key…]

Sinterstore destination key [key…]

Suniondtore destination key [key …]

指令示範如下:

Redis清單和集合類型學習

擷取集合資訊:

擷取集合中元素個數:Scard key

随即擷取集合中的元素:Srandmember key [count]

從集合中彈出一個元素:Spop key (随機彈出一個元素并移除)

指令示範如下:

Redis清單和集合類型學習

有序集合類型

有序集合跟清單一樣是有序的,跟集合一樣,元素是唯一的

基本指令

增加元素:zadd key score member [score member…]

擷取元素分數:zscore key member

擷取排名在某個範圍内的元素清單:

遞增排序擷取元素:zrange key start stop [withscores]

遞減排序擷取元素:zrevrange key start stop [withscores]

已存在的鍵的值還可以做修改:

增加某個元素的分數:zincrby key increment member

指令示範如下:

Redis清單和集合類型學習
Redis清單和集合類型學習

擷取指定分數範圍的元素:

Zrangebyscore key min max [withscores] [limit offset count] (不包含端點值可以在min,max前加左括号“(”,正負無窮表示為+inf、-inf,limit後offset是查詢結果的第幾個元素開始,count是取多少元素)

Redis清單和集合類型學習

擷取集合的資訊

擷取集合中元素的數量:zcard key

擷取指定分數範圍内元素的個數:zcount key min max

擷取元素的排名:升序排序 zrank key member

降序排序 zrevrank key member

指令示範如下:

Redis清單和集合類型學習

删除集合的元素

删除一個或多個元素:zrem key member [member..]

按照排名範圍删除元素 zremrangebyrank key start stop

按照分數範圍删除元素:zremrangebyscore key min max

指令示範如下:

Redis清單和集合類型學習

集合間的運算

交集:zinterstore destination numkeys key [key…] [weights weight [weight …]] [aggregate sum|min|max]

并集: zunionstore destination numkeys key [key…] [weights weight [weight …]] [aggregate sum|min|max]

Numkeys:參與運算的鍵總數;

Weights :每個鍵的權重

Aggregate:相同元素在結果集的分數

指令示範如下:

Redis清單和集合類型學習

繼續閱讀