redis的set集合
生活随笔
收集整理的這篇文章主要介紹了
redis的set集合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redis
- 一、Redis 數據模型
- 數據模型圖
- 二、Set集合
- 2.1set集合相關命令
- 2.1.1增加一個或多個元素
- 2.1.2移除一個或者多個元素
- 2.1.3返回集合包含的所有元素
- 2.1.4檢查給定元素是否存在于集合中
- 2.1.5集合的無序性
- 2.1.6隨機返回集合中指定個數的
- 2.1.7返回元素個數、移除
- 三、Set的集合操作
- 3.1差集
- 3.2交集
- 3.3并集
- 四、SortedSet有序集合
- 4.1增加一個或多個元素
- 4.2移除一個或者多個元素
- 4.3顯示分值
- 4.4增加或者減少分值
- 4.5返回元素的排名(索引)
- 4.6返回元素的逆序排名
- 4.7返回指定索引區間元素
- 4.8返回指定分值區間元素
- 4.9移除指定排名范圍的元素、移除指定分值范圍的元素
- 4.10并集、交集
一、Redis 數據模型
數據模型圖
二、Set集合
無序的、去重的 元素是字符串類型 最多包含2^32-1元素2.1set集合相關命令
2.1.1增加一個或多個元素
SADD key member [member ...] 如果元素已經存在,則自動忽略 舉例 SADD friends peter SADD friends jack tom john SADD friends may tom2.1.2移除一個或者多個元素
SREM key member [member ...] 元素不存在,自動忽略 舉例 SREM friends peter SREM friends tom john2.1.3返回集合包含的所有元素
SMEMBERS key 如果集合元素過多,例如百萬個,需要遍歷,可能會造成服務器阻塞,生產環境應避免使用2.1.4檢查給定元素是否存在于集合中
SISMEMBER key member2.1.5集合的無序性
SADD friends "peter" "jack" "tom" "john" "may" "ben" SADD anotherfriends "peter" "jack" "tom" "john" "may" "ben" SMEMBERS friends SMEMBERS anotherfriends 注意,SMEMBERS 有可能返回不同的結果,所以,如果需要存儲有序且不重復的數據使用有序集合,存儲有序可重復的使用列表2.1.6隨機返回集合中指定個數的
SRANDMEMBER key [count] 如果 count 為正數,且小于集合基數,那么命令返回一個包含 count 個元素的數組,數組中的元素各不相同。如果 count 大于等于集合基數,那么返回整個集合 如果 count 為負數,那么命令返回一個數組,數組中的元素可能會重復出現多次,而數組的長度為 count 的絕對值 如果 count 為 0,返回空 如果 count 不指定,隨機返回一個元素 舉例 SADD friend "peter" "jack" "tom" "john" "may" "ben" SRANDMEMBER friends 3 SRANDMEMBER friends -52.1.7返回元素個數、移除
返回集合中元素的個數 SCARD key 鍵的結果會保存信息,集合長度就記錄在里面,所以不需要遍歷 隨機從集合中移除并返回這個被移除的元素 SPOP key 把元素從源集合移動到目標集合 SMOVE source destination member三、Set的集合操作
3.1差集
SDIFF key [key ...],從第一個key的集合中去除其他集合和自己的交集部分 SDIFFSTORE destination key [key ...],將差集結果存儲在目標key中 舉例 SADD number1 123 456 789 SADD number2 123 456 999 SDIFF number1 number23.2交集
SINTER key [key ...],取所有集合交集部分 SINTERSTORE destination key [key ...],將交集結果存儲在目標key中 舉例 SADD number1 123 456 789 SADD number2 123 456 999 SINTER number1 number23.3并集
SUNION key [key ...],取所有集合并集 SUNIONSTORE destination key [key ...],將并集結果存儲在目標key中 舉例 SADD number1 123 456 789 SADD number2 123 456 999 SUNION number1 number2 例: 新浪微博的共同關注 需求:當用戶訪問另一個用戶的時候,會顯示出兩個用戶共同關注哪些相同的用戶 設計:將每個用戶關注的用戶放在集合中,求交集即可 實現如下: peter={'john','jack','may'} ben={'john','jack','tom'} 那么peter和ben的共同關注為: SINTER peter ben 結果為 {'john','jack'}四、SortedSet有序集合
類似Set集合 有序的、去重的 元素是字符串類型 每一個元素都關聯著一個浮點數分值(Score),并按照分值從小到大的順序排列集合中的元素。分值可以相同 最多包含2^32-1元素4.1增加一個或多個元素
ZADD key score member [score member ...] 如果元素已經存在,則使用新的score 舉例 ZADD fruits 3.2 香蕉 ZADD fruits 2.0 西瓜 ZADD fruits 4.0 番石榴 7.0 梨 6.8 芒果4.2移除一個或者多個元素
ZREM key member [member ...] 元素不存在,自動忽略 舉例 ZREM fruits 番石榴 梨 芒果 ZREM fruits 西瓜4.3顯示分值
ZSCORE key member 舉例 ZSCORE fruits 芒果 ZSCORE fruits 西瓜
計算機并不能精確表達每一個浮點數,都是一種近似表達
4.4增加或者減少分值
ZINCRBY key increment member increment為負數就是減少 舉例 ZINCRBY fruits 1.5 西瓜 ZINCRBY fruits -0.8 香蕉4.5返回元素的排名(索引)
ZRANK key member 舉例 ZRANK fruits 西瓜 ZRANK fruits 番石榴 ZRANK fruits 芒果4.6返回元素的逆序排名
ZREVRANK key member 舉例 ZREVRANK fruits 西瓜 ZREVRANK fruits 番石榴 ZREVRANK fruits 芒果4.7返回指定索引區間元素
ZRANGE key start stop [WITHSCORES] 如果score相同,則按照字典序lexicographical order 排列 默認按照score從小到大,如果需要score從大到小排列,使用ZREVRANGE 舉例 ZRANGE fruits 0 2 ZRANGE fruits -5 -4ZREVRANGE key start stop [WITHSCORES] 如果score相同,則按照字典序lexicographical order 的 逆序 排列 默認按照score從大到小,如果需要score從小到大排列,使用ZRANGE 舉例 ZREVRANGE fruits 0 2 ZREVRANGE fruits -5 -44.8返回指定分值區間元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默認屬于[min,max]之間,元素按照score升序排列,score相同字典序 LIMIT中offset代表跳過多少個元素,count是返回幾個。類似于Mysql 使用小括號,修改區間為開區間,例如(5、(10、5) -inf和+inf表示負無窮和正無窮 舉例 ZRANGEBYSCORE fruits 4.0 7.0 ZRANGEBYSCORE fruits (4 7 ZRANGEBYSCORE fruits -inf +infZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默認屬于[min,max]之間,元素按照score降序排列,score相同字典降序 LIMIT中offset代表跳過多少個元素,count是返回幾個。類似于Mysql 使用小括號,修改區間為開區間,例如(5、(10、5) -inf和+inf表示負無窮和正無窮 舉例 ZREVRANGEBYSCORE fruits 7.0 4.0 ZRANGEBYSCORE fruits 7 (4 ZRANGEBYSCORE fruits +inf -inf4.9移除指定排名范圍的元素、移除指定分值范圍的元素
ZREMRANGEBYRANK key start stop 舉例 ZREMRANGEBYRANK fruits 0 2 ZRANGE fruits 0 -1ZREMRANGEBYSCORE key min max 舉例 ZREMRANGEBYSCORE fruits 3.0 5.0 ZRANGE fruits 0 -1 返回集合中元素個數 ZCARD key 返回指定范圍中元素的個數 ZCOUNT key min max ZCOUNT fruits 4 7 ZCOUNT fruits (4 74.10并集、交集
并集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] numkeys指定key的數量,必須 WEIGHTS選項,與前面設定的key對應,對應key中每一個score都要乘以這個權重 AGGREGATE選項,指定并集結果的聚合方式 SUM:將所有集合中某一個元素的score值之和作為結果集中該成員的score值 MIN:將所有集合中某一個元素的score值中最小值作為結果集中該成員的score值 MAX:將所有集合中某一個元素的score值中最大值作為結果集中該成員的score值 舉例 ZADD scores1 70 tom 80 peter 60 john ZADD scores2 90 peter 60 ben ZUNIONSTORE scores-all 2 scores1 scores2 ZUNIONSTORE scores-all1 2 scores1 scores2 AGGREGATE SUM ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] numkeys指定key的數量,必須 WEIGHTS選項,與前面設定的key對應,對應key中每一個score都要乘以這個權重 AGGREGATE選項,指定并集結果的聚合方式 SUM:將所有集合中某一個元素的score值之和作為結果集中該成員的score值 MIN:將所有集合中某一個元素的score值中最小值作為結果集中該成員的score值 MAX:將所有集合中某一個元素的score值中最大值作為結果集中該成員的score值例1:網易音樂排行榜怎么做?
分析:
每首歌的歌名作為元素(先不考慮重復)
每首歌的播放次數作為分值
ZREVRANGE來獲取播放次數最多的歌曲(就是最多播放榜了,云音樂熱歌榜,沒有競價,沒有權重)
例2:新浪微博翻頁
新聞網站、博客、論壇、搜索引擎,頁面列表條目多,都需要分頁
blog這個key中使用時間戳作為score
例3:京東圖書暢銷榜
單日榜,計算出周榜單、月榜單、年榜單 怎么做?
京東圖書暢銷榜
總結
以上是生活随笔為你收集整理的redis的set集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DSOfile,修改windows系统文
- 下一篇: 根据生日得到星座