Redis的各種數(shù)據(jù)類型實(shí)踐-Set

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)。
Redis 中集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。

Set常用操作

SADD  key  member  [member ...]//往集合key中存入元素,元素存在則忽略,若key不存在則新建
SREM  key  member  [member ...]//從集合key中刪除元素
SMEMBERS  key //獲取集合key中所有元素
SCARD  key//獲取集合key的元素個(gè)數(shù)
SISMEMBER  key  member//判斷member元素是否存在于集合key中
SRANDMEMBER  key  [count]//從集合key中選出count個(gè)元素,元素不從key中刪除
SPOP  key  [count]//從集合key中選出count個(gè)元素,元素從key中刪除

Set 運(yùn)算操作

SINTER key [key ...] //交集運(yùn)算
SINTERSTORE destination key [key ..]//將交集結(jié)果存入新集合destination中
SUNION key [key ..] //并集運(yùn)算
SUNIONSTORE destination key [key ...]//將并集結(jié)果存入新集合destination中
SDIFF key [key ...] //差集運(yùn)算
SDIFFSTORE destination key [key ...]//將差集結(jié)果存入新集合destination中

應(yīng)用場(chǎng)景

1、抽獎(jiǎng)程序

想必大家都用過微信里的抽獎(jiǎng)小程序吧,如下圖,我們可以點(diǎn)擊立即參與進(jìn)行抽獎(jiǎng),還可以查看所有參與人員,最后就是開獎(jiǎng)的功能,一共三個(gè)關(guān)鍵點(diǎn)

我們看一下這三個(gè)關(guān)鍵點(diǎn)用set數(shù)據(jù)類型怎么實(shí)現(xiàn):

1) 點(diǎn)擊參與抽獎(jiǎng),則將用戶id用戶加入集合

SADD key {userlD}

2)查看參與抽獎(jiǎng)所有用戶

SMEMBERS key
3)抽取count名中獎(jiǎng)?wù)?/p>

SRANDMEMBER key [count]//返回但不從set中剔除
SPOP key [count]//返回并剔除

如果設(shè)置了一等獎(jiǎng)二等獎(jiǎng)三等獎(jiǎng)...,并且每人只能得一種,則可以用SPOP key count

image

2、微信微博點(diǎn)贊,收藏,標(biāo)簽

比如你發(fā)了一條朋友圈有人點(diǎn)贊

  1. 點(diǎn)贊 點(diǎn)贊就把點(diǎn)贊這個(gè)人的ID加到這個(gè)點(diǎn)贊的集合中

SADD like:{消息ID} {用戶ID}

  1. 取消點(diǎn)贊 從集合中移除用戶ID

SREM like:{消息ID} {用戶ID}

  1. 檢查用戶是否點(diǎn)過贊

SISMEMBER like:{消息ID} {用戶ID}

  1. 獲取點(diǎn)贊的用戶列表

SMEMBERS like:{消息ID}

  1. 獲取點(diǎn)贊用戶數(shù)

SCARD like:{消息ID}

image

Set集合運(yùn)算操作的應(yīng)用場(chǎng)景

基于Redis set集合提供的豐富的命令,我們可以對(duì)集合輕松的實(shí)現(xiàn)交并差的運(yùn)算。例如,現(xiàn)有集合set1,set12,set3,元素如下:

set1:{a,b,c}
set2:{a,c,e}
set3:{c,d,f}
對(duì)集合進(jìn)行交、并、差的運(yùn)算

SINTER set1 set2 set3 //交集--> { c }
SUNION set1 set2 set3 //并集--> { a,b,c,d,e,f }
SDIFF set1 set2 set3 //差集--> { b }
通過這些基本操作我們看可以實(shí)現(xiàn)什么樣的業(yè)務(wù)需求。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容