?????作者名稱:DaenCode
??作者簡介:啥技術(shù)都喜歡搗鼓搗鼓,喜歡分享技術(shù)、經(jīng)驗(yàn)、生活。
??人生感悟:嘗盡人生百味,方知世間冷暖。
??所屬專欄:Redis從頭學(xué)
??前言
之前的篇章對Redis的String、List、Hash數(shù)據(jù)類型已經(jīng)做出了具體分析,并舉例說明了其具體的實(shí)戰(zhàn)場景本文就結(jié)合Set數(shù)據(jù)類型結(jié)構(gòu)的特性,一起探討其實(shí)戰(zhàn)中的應(yīng)用場景,并以社交平臺(tái)中的引力簽、共同關(guān)注好友、是否是某人的粉絲等等為例來展示set數(shù)據(jù)類型的特點(diǎn)。
??Set數(shù)據(jù)類型分析
Redis中的Set數(shù)據(jù)類型是一種無序、不重復(fù)的集合,它提供了高效的集合操作,例如添加、刪除、判斷元素是否存在等。下面對Redis Set數(shù)據(jù)類型進(jìn)行一些分析:
- 無序性:Set中的元素是無序存儲(chǔ)的,每次獲取的順序可能不同。這使得Set非常適合于存儲(chǔ)不需要特定順序的元素。
- 元素的唯一性:Set保證其中的元素都是唯一的,即不會(huì)存在重復(fù)的元素。當(dāng)向Set中添加已經(jīng)存在的元素時(shí),新元素將被忽略。
- 高效的添加、刪除和判斷操作:Set提供了O(1)時(shí)間復(fù)雜度的添加、刪除和判斷元素是否存在的操作。這歸功于Redis內(nèi)部使用了哈希表來實(shí)現(xiàn)Set數(shù)據(jù)類型。
-
集合運(yùn)算:Redis的Set數(shù)據(jù)類型支持集合運(yùn)算,例如
交集、并集、差集
等操作??梢詫Χ鄠€(gè)Set進(jìn)行集合運(yùn)算,方便進(jìn)行數(shù)據(jù)分析和處理。 - 存儲(chǔ)大量的元素:Set可以存儲(chǔ)大量的元素,并且在數(shù)量上沒有明確的限制。這使得Set非常適用于需要存儲(chǔ)和處理大型集合的場景。
??Set類型實(shí)戰(zhàn)應(yīng)用場景
Set常用于存儲(chǔ)用戶標(biāo)簽、好友列表、點(diǎn)贊列表、投票系統(tǒng)
等場景。它可以快速判斷元素是否存在,進(jìn)行集合運(yùn)算,滿足各種實(shí)時(shí)數(shù)據(jù)處理的需求。
總而言之,Redis的Set數(shù)據(jù)類型提供了高效、靈活且功能強(qiáng)大的集合操作,適用于需要存儲(chǔ)和處理無序且不重復(fù)元素的場景。它在實(shí)時(shí)數(shù)據(jù)分析、用戶關(guān)系管理等方面具有廣泛的應(yīng)用。
用戶畫像去重功能
生活中的例子
比如說交友平臺(tái)的用戶標(biāo)簽,以Soul平臺(tái)為例或者王者榮耀中的賽季標(biāo)簽等等。
代碼示例
利用set數(shù)據(jù)類型無序且元素不可重復(fù)的特點(diǎn)。通過members API來取出所有的用戶畫像并自動(dòng)的進(jìn)行去重。
@Test
void userProfile(){
BoundSetOperations operations=redisTemplate.boundSetOps("user:tagg:1");
operations.add("car","student","rich","dog","dog");
Set<String> set=operations.members();
System.out.println("此用戶畫像為"+set);
}
運(yùn)行結(jié)果:
此用戶畫像為[car, dog, rich, student]
共同關(guān)注、專屬粉絲
生活中的例子
類似于抖音或者小紅書上經(jīng)常會(huì)在推薦或者可能認(rèn)識的人中,會(huì)有灰色字體提示你們共同關(guān)注、共同好友、是否是你粉絲等等。
代碼示例
通過其差集、交集、并集來實(shí)現(xiàn)集合間的運(yùn)算命令來實(shí)現(xiàn)共同關(guān)注、專屬粉絲等功能,以及isMember來判斷是否是某人的粉絲。
@Test
void testSocial(){
BoundSetOperations lzOperations=redisTemplate.boundSetOps("user:lz");
lzOperations.add("A","B","C","E");
System.out.println("老甄的粉絲"+lzOperations.members());
BoundSetOperations llOperations=redisTemplate.boundSetOps("user:ll");
llOperations.add("A","F","C","E");
System.out.println("老李的粉絲"+llOperations.members());
//差集
Set lz=lzOperations.diff("user:ll");
System.out.println("老甄專屬粉絲"+lz);
Set ll=llOperations.diff("user:lz");
System.out.println("老李專屬粉絲"+ll);
//交集
Set interSet=lzOperations.intersect("user:ll");
System.out.println("同時(shí)關(guān)注"+interSet);
//并集
Set unionSet=lzOperations.union("user:ll");
System.out.println("兩個(gè)人的并集"+unionSet);
//是否是某人粉絲
boolean flag=lzOperations.isMember("A");
System.out.println("A是否是老甄的粉絲"+flag);
}
運(yùn)行結(jié)果:
老甄的粉絲[A, C, E, B]
老李的粉絲[A, C, E, F]
老甄專屬粉絲[B]
老李專屬粉絲[F]
同時(shí)關(guān)注[A, C, E]
兩個(gè)人的并集[C, F, E, B, A]
A是否是老甄的粉絲true
??寫在最后
有關(guān)于Redis中的Set數(shù)據(jù)類型實(shí)戰(zhàn)應(yīng)用場景到此就結(jié)束了。功能演示代碼的邏輯簡單,目的是理解Set數(shù)據(jù)類型的應(yīng)用,實(shí)際場景的邏輯根據(jù)具體需求而定。感謝大家的閱讀,希望大家在評論區(qū)對此部分內(nèi)容散發(fā)討論或者有什么其他場景也可以在評論區(qū)提出。文章來源:http://www.zghlxwxcb.cn/news/detail-664049.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-664049.html
到了這里,關(guān)于【Redis從頭學(xué)-7】Redis中的Set數(shù)據(jù)類型實(shí)戰(zhàn)場景之用戶畫像去重、共同關(guān)注、專屬粉絲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!