日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis的set集合

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 tom

2.1.2移除一個或者多個元素

SREM key member [member ...] 元素不存在,自動忽略 舉例 SREM friends peter SREM friends tom john

2.1.3返回集合包含的所有元素

SMEMBERS key 如果集合元素過多,例如百萬個,需要遍歷,可能會造成服務器阻塞,生產環境應避免使用

2.1.4檢查給定元素是否存在于集合中

SISMEMBER key member

2.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 -5

2.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 number2

3.2交集

SINTER key [key ...],取所有集合交集部分 SINTERSTORE destination key [key ...],將交集結果存儲在目標key中 舉例 SADD number1 123 456 789 SADD number2 123 456 999 SINTER number1 number2

3.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.06.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 -4

4.8返回指定分值區間元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默認屬于[min,max]之間,元素按照score升序排列,score相同字典序 LIMIT中offset代表跳過多少個元素,count是返回幾個。類似于Mysql 使用小括號,修改區間為開區間,例如(5(105) -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(105) -inf和+inf表示負無窮和正無窮 舉例 ZREVRANGEBYSCORE fruits 7.0 4.0 ZRANGEBYSCORE fruits 7 (4 ZRANGEBYSCORE fruits +inf -inf

4.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 7

4.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

ZADD blog 1407000000 '今天天氣不錯' ZADD blog 1450000000 '今天我們學習Redis' ZADD blog 1560000000 '幾個Redis使用示例' ZREVRANGE blog 10 20

例3:京東圖書暢銷榜
單日榜,計算出周榜單、月榜單、年榜單 怎么做?
京東圖書暢銷榜

ZADD bookboard-001 1000 'java' 1500 'Redis' 2000 'haoop' ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop' ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'haoop' ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002 bookboard-003,行嗎? ZADD bookboard-001 1000 'java' 1500 'Redis' 2000 'haoop' ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop' ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'haoop' ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002 bookboard-003 AGGREGATE MAX 并集,使用max 注意:參與并集運算的集合較多,會造成Redis服務器阻塞,因此最好放在空閑時間或者備用服務器上進行計算

總結

以上是生活随笔為你收集整理的redis的set集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。