標籤:
集合
添加/刪除元素
SADD key member1 member2 ...
SREM key member1 member2 ...
獲得集合中的所有元素
SMEMBERS key
127.0.0.1:6380> sadd car benz baoma xiandai(integer) 3127.0.0.1:6380> smembers car1) "baoma"2) "xiandai"3) "benz"127.0.0.1:6380> srem car benz(integer) 1127.0.0.1:6380> smembers car1) "baoma"2) "xiandai"127.0.0.1:6380>
判斷某個元素是否在集合中,存在則返回1,不存在則返回0
SISMEMBER key member
127.0.0.1:6380> sismember car xiandai(integer) 1127.0.0.1:6380> sismember car benz(integer) 0127.0.0.1:6380>
集合間的運算
SDIFF key1 key2... 即A-B={x|x∈A且x∈/B}
SINTER key1 key2... 即A∩B={x|x∈A且x∈B}
SUNION key1 key2 ... 即AUB={x|x∈A 或x∈B}
127.0.0.1:6380> sadd a 1 2 3 4 (integer) 4127.0.0.1:6380> sadd b 3 4 5 6(integer) 4127.0.0.1:6380> sdiff a b1) "1"2) "2"127.0.0.1:6380> sinter a b1) "3"2) "4"127.0.0.1:6380> sunion a b1) "1"2) "2"3) "3"4) "4"5) "5"6) "6"127.0.0.1:6380>
進行集合運算並將結果儲存
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
SDIFFSTORE命令和SDIFF命令功能一樣,唯一的區別就是前者不會直接返回運算結果,而是將結果儲存在destination鍵中。
SDIFFSTORE命令常用於需要進行多步集合運算的情境中,如需要先計算差集再將結果和其他鍵計算交集。
擷取集合中元素的個數:
SCARD key
隨機獲得集合中的元素
SRANDMEMBER key [count]
(1)當count為正數時,SRANDMEMBER會隨機從集合裡獲得count個不重複的元素。如果count的值大於集合中的元素個數,則SRANDMEMBER會返回集合中的全部元素。(2)當count為負數時,SRANDMEMBER會隨機從集合裡獲得|count|個的元素,這些元素有可能相同。
127.0.0.1:6380> srandmember a 21) "4"2) "2"127.0.0.1:6380> srandmember a"3"127.0.0.1:6380>
從集合中彈出一個元素
SPOP KEY 這個隨機彈出的
127.0.0.1:6380> smembers a1) "1"2) "2"3) "3"4) "4"127.0.0.1:6380> spop a"1"127.0.0.1:6380> spop a"3"127.0.0.1:6380> smembers a1) "2"2) "4"127.0.0.1:6380>
有序集合
有序集合類型在某些方面和清單類型有些相似。
(1)二者都是有序的。
(2)二者都可以獲得某一範圍的元素。
但是二者有著很大的區別,這使得它們的應用情境也是不同的。
(1)清單類型是通過鏈表實現的,擷取靠近兩端的資料速度極快,而當元素增多後,訪問中間資料的速度會較慢,所以它更加適合實現如“新鮮事”或“日誌”這樣很少訪問中間元素的
應用。
(2)有序集合類型是使用散列表和跳躍表(Skip list)實現的,所以即使讀取位於中間部分的資料速度也很快(時間複雜度是O(log(N)))。
(3)列表中不能簡單地調整某個元素的位置,但是有序集合可以(通過更改這個元素的分數)。
(4)有序集合要比清單類型更耗費記憶體。有序集合類型算得上是 Redis的5種資料類型中最進階的類型了,在學習時可以與清單類型和集合類型對照理解。
增加元素
ZADD key scord member [scord member ...]
修改某個元素的分數
ZADD key scord member
擷取元素的分數
ZSCORE key member
127.0.0.1:6380> zadd cheeron 90 math 80 english 89 chinese(integer) 3127.0.0.1:6380> zadd cheeron 87 english(integer) 0127.0.0.1:6380> zscore cheeron math"90"127.0.0.1:6380> zscore cheeron english"87"127.0.0.1:6380>
獲得排名在某個範圍的元素列表
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGE命令會按照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)。ZRANGE命令與LRANGE命令十分相似,如索引都是從0開始,負數代表從後向前尋找(-1表示最後一個元素)。
127.0.0.1:6380> zrange cheeron 0 21) "english"2) "chinese"3) "math"127.0.0.1:6380> zrange cheeron 1 -11) "chinese"2) "math"127.0.0.1:6380> zrange cheeron 2 0(empty list or set)
如果需要同時獲得元素的分數的話可以在ZRANGE命令的尾部加上WITHSCORES參數
127.0.0.1:6380> zrange cheeron 0 -1 withscores1) "english"2) "87"3) "chinese"4) "89"5) "math"6) "90"127.0.0.1:6380>
獲得指定分數範圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE命令參數雖然多,但是都很好理解。該命令按照元素分數從小到大的順序返回分數在min和max之間(包含min和max)的元素:
加了"("則表示不包含的意思
127.0.0.1:6380> zrangebyscore cheeron 80 901) "english"2) "chinese"3) "math"127.0.0.1:6380> zrangebyscore cheeron 80 (901) "english"2) "chinese"127.0.0.1:6380>
redis學習(二)