Redis 的 Set 是 String 類型的無序集合新症。集合成員是唯一的筑凫,這就意味著集合中不能出現重復的數據。
Redis 中集合是通過哈希表實現的吨艇,所以添加躬它,刪除,查找的復雜度都是 O(1)东涡。
Set常用操作
SADD key member [member ...]//往集合key中存入元素冯吓,元素存在則忽略,若key不存在則新建
SREM key member [member ...]//從集合key中刪除元素
SMEMBERS key //獲取集合key中所有元素
SCARD key//獲取集合key的元素個數
SISMEMBER key member//判斷member元素是否存在于集合key中
SRANDMEMBER key [count]//從集合key中選出count個元素疮跑,元素不從key中刪除
SPOP key [count]//從集合key中選出count個元素组贺,元素從key中刪除
Set 運算操作
SINTER key [key ...] //交集運算
SINTERSTORE destination key [key ..]//將交集結果存入新集合destination中
SUNION key [key ..] //并集運算
SUNIONSTORE destination key [key ...]//將并集結果存入新集合destination中
SDIFF key [key ...] //差集運算
SDIFFSTORE destination key [key ...]//將差集結果存入新集合destination中
應用場景
1、抽獎程序
想必大家都用過微信里的抽獎小程序吧祸挪,如下圖锣披,我們可以點擊立即參與進行抽獎,還可以查看所有參與人員贿条,最后就是開獎的功能雹仿,一共三個關鍵點
我們看一下這三個關鍵點用set數據類型怎么實現:
1) 點擊參與抽獎,則將用戶id用戶加入集合
SADD key {userlD}
2)查看參與抽獎所有用戶
SMEMBERS key
3)抽取count名中獎者
SRANDMEMBER key [count]//返回但不從set中剔除
SPOP key [count]//返回并剔除
如果設置了一等獎二等獎三等獎...整以,并且每人只能得一種胧辽,則可以用SPOP key count
2、微信微博點贊公黑,收藏邑商,標簽
比如你發(fā)了一條朋友圈有人點贊
- 點贊 點贊就把點贊這個人的ID加到這個點贊的集合中
SADD like:{消息ID} {用戶ID}
- 取消點贊 從集合中移除用戶ID
SREM like:{消息ID} {用戶ID}
- 檢查用戶是否點過贊
SISMEMBER like:{消息ID} {用戶ID}
- 獲取點贊的用戶列表
SMEMBERS like:{消息ID}
- 獲取點贊用戶數
SCARD like:{消息ID}
Set集合運算操作的應用場景
基于Redis set集合提供的豐富的命令摄咆,我們可以對集合輕松的實現交并差的運算。例如人断,現有集合set1吭从,set12,set3恶迈,元素如下:
set1:{a,b,c}
set2:{a,c,e}
set3:{c,d,f}
對集合進行交涩金、并、差的運算
SINTER set1 set2 set3 //交集--> { c }
SUNION set1 set2 set3 //并集--> { a,b,c,d,e,f }
SDIFF set1 set2 set3 //差集--> { b }
通過這些基本操作我們看可以實現什么樣的業(yè)務需求暇仲。