redis筆記05-set集合和order set有序集合

【集合 set 相關命令】

集合的性質: 唯一性,無序性,確定性

注: 在string和link的命令中,可以通過range 來訪問string中的某幾個字符或某幾個元素。但,因爲集合的無序性,無法通過下標或範圍來訪問部分元素.

因此想看元素,要麼隨機選一個,要麼全選

 

SMEMBERS key

返回集合 key 中的所有成員。不存在的 key 被視爲空集合。

 

SADD key member [member ...]

將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。

假如 key 不存在,則創建一個只包含 member 元素作成員的集合。當 key 不是集合類型時,返回一個錯誤。

返回值: 新增成功的元素個數

 

SREM key member [member ...]

移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略

返回值:被成功移除的元素的數量,不包括被忽略的元素。注:當 key 不是集合類型,返回一個錯誤

 

SCARD key

返回集合 key 的基數(集合中元素的數量)。

返回集合的元素個數。當 key 不存在時,返回 0 。

 

SISMEMBER key member

判斷 member 元素是否集合 key 的成員。

返回值:如果 member 元素是集合的成員,返回 1 。如果 member 元素不是集合的成員,或 key 不存在,返回 0

 

SMOVE source destination member

將 member 元素從 source 集合移動到 destination 集合。SMOVE 是原子性操作。

返回值: 1。如果 source 集合不存在或不包含指定的 member 元素,返回 0 ;當 source 或 destination 不是集合類型時,返回一個錯誤。

 

SPOP key 移除並返回集合中的一個隨機元素

SRANDMEMBER 返回集合中的一個隨機元素

返回值:被移除的隨機元素。

注:當 key 不存在或 key 是空集時,返回 nil

 

SINTER key1 [key2 ...]

返回key1 key2 ..keyn的交集,不存在的 key 被視爲空集(結果肯定是空集了)。

返回值:交集成員的列表。

sinterstore dest key1 [key2],返回結果儲存在dest集合中。

 

SUNION、SUNIONSTORE、SDIFF、SDIFFSTORE

 

----------------- 單個集合的一些操作 -----------------

sadd key value1 value2 作用: 往集合key中增加元素

備註:由於具有唯一性,所以增加一個已經存在的元素時會返回0.

scard key 作用: 返回集合中元素的個數

smembers key 作用: 返回集中中所有的元素

srandmember key 作用: 返回集合key中,隨機的1個元素.

sismember key value 作用: 判斷value是否存在key集合中,存在是返回1,不存在返回0。

srem key value1 value2 作用: 刪除集合中值爲 value1 value2的元素;返回值: 忽略不存在的元素後,真正刪除掉的元素的個數

spop key 作用: 返回並刪除集合key中1個隨機元素。隨機--體現了無序性

 

----------------- 兩個集合的一些操作 -----------------

smove key1 key2 value 作用:把key1中的value刪除,並添加到key2集合中.(或者說把key1中的value值移動到key2中)

sinter key1 key2 key3 作用: 求出key1 key2 key3 三個集合中的交集,並返回

sinterstore dest1 key1 key2 key3 作用: 求出key1 key2 key3 三個集合中的交集,並賦給dest1

sunion key1 key2.. Keyn 作用: 求出key1 key2 keyn的並集,並返回

sunionstore dest2 key1 key2.. Keyn 作用: 求出key1 key2 keyn的並集, 並賦給dest2

sdiff key1 key2 key3 作用: 求出key1與key2 key3的差集,即key1-key2-key3

sdiffstore dest3 key1 key2 key3 作用: 求出key1與key2 key3的差集, 並賦給dest3

 

【order set 有序集合】

(可用於排行榜的數據存儲和獲取)

ZADD key score member [[score member] [score member] ...]

score可爲整數或浮點數,score可重複。返回:成功添加的元素數量

 

zrem key member1 [member2 ..]

刪除member1,member2。返回:被成功移除的數量

 

zcard key

返回key中元素的數量

 

zcount key min max

返回[min,max] 區間內元素的數量

 

ZRANGE key start stop [WITHSCORES]

返回start->stop的元素

 

ZSCORE key member

返回成員 member 的 score 值。如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。

 

zrevrange key start stop [withscores]

倒序排列後,返回start->stop的元素

 

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

按分數(升續)排序,取[min,max]之間的值, 並偏移offset取count個

 

zrevrangebyscore

不解釋

 

ZRANK key member

返回member的排名,升序比較,從第0名開始

 

zrevrank key member

不解釋

 

ZREMRANGEBYRANK key start stop

按排名刪除 start->stop名的元素

 

zremrangebyscore key start,stop

按分數刪除[start,stop]之間的元素

 

ZINTERSTORE destination numkeys key [key ...][WEIGHTS weight [weight ...]][AGGREGATE SUM|MIN|MAX]

求交集

 

ZUNIONSTORE destination numkeys key [key ...][WEIGHTS weight [weight ...]][AGGREGATE SUM|MIN|MAX]

求並集

 

------------------ zadd 添加數據 ------------------

zadd key score1 value1 score2 value2 .. 作用:給有序集合添加元素

[例如] zadd stu 18 lily 19 hmm 20 lilei 21 lilei

 

------------------ zrange 和 zrevrange 根據名次取數據------------------

zrange key start stop [WITHSCORES]

作用:把集合排序後,返回名次[start,stop]的元素,默認是升續排列。Withscores 是把score也打印出來。

→取出所有數據start=0,stop=-1即可。

→如下案例表示取出第1名到第2名的數據,由小到大排列。

zrevrange key start stop [WITHSCORES]

作用:把集合降序排列,取名字[start,stop]之間的元素。

 

------------------ zrangebyscore 和 zrevrangebyscore 根據分數取數據------------------

zrangebyscore key min max [withscores] [limit offset N]

作用: 取分數介於min和max之間的,按照分數升續排序;

limit offset N:取score在[min,max]內的元素,並跳過 offset個, 取出N個

→如下案例取分數介於1到20之間(也就是全部)的,跳過第0位,從1位開始取,取兩個,即:limit 1 2.

zrevrangebyscore key max min [withscores] [limit offset N]

作用: 取分數介於max和min之間的,按照分數降續排序;注意這裏是max到min!!

 

------------------ zrank 和 zrevrank 根據name獲取名次 ------------------

zrank key member 作用:查詢member的排名(升續 從0名開始)

zrevrank key memeber 作用:查詢 member的排名(降續 從0名開始)

→如下案例演示升序情況下poly是第0名,降序情況下是第3名。

 

------------------ zrem 和 zremrangebyscore 和zremrangebyrank 三種方式刪除元素 ------------------

zrem key value1 value2 .. 作用: 刪除集合中的元素

→刪除name是lily和poly的。

zremrangebyscore key min max 作用: 按照socre來刪除元素,刪除score在[min,max]之間的

→恢復原始數據,刪除score介於10到15的。

zremrangebyrank key start end 作用: 按排名刪除元素,刪除名次在[start,end]之間的

→恢復原始數據,刪除名次介於第0名到第2名的。

 

------------------ zcard 和 zcount 統計數量 ------------------

zcard key 作用:返回元素個數

zcount key min max 作用:返回分數在 [min,max] 區間內元素的數量

zinterstore destination numkeys key1 [key2 ...]

[WEIGHTS weight [weight ...]]

[AGGREGATE SUM|MIN|MAX]

求key1,key2的交集,key1,key2的權重分別是 weight1,weight2

聚合方法用: sum |min|max

聚合的結果,保存在dest集合內

 

注意: weights ,aggregate如何理解?

答: 如果有交集, 交集元素又有socre,score怎麼處理? Aggregate sum->score相加 , min 求最小score, max 最大score

另: 可以通過weigth設置不同key的權重, 交集時,socre * weights

 

 

【情景設置】lisi買了3只cat、5只dog、6只horse;wang買了2只cat、6只dog、8只horse、1只donkey。取兩者的交集並存儲在報表裏。

ZADD lisi 3 cat 5 dog 6 horse

ZADD wang 2 cat 6 dog 8 horse 1 donkey

ZINTERSTORE result 2 lisi wang

取最小的和最大的,加上 aggregate min / aggregate max

加上權重 weights,相當於翻多少倍:

zunionstore destination numkeys key1 [key2 ...]

[WEIGHTS weight [weight ...]]

[AGGREGATE SUM|MIN|MAX]

取並集,和上面類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章