欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis實(shí)現(xiàn)排名功能的示例代碼

 更新時(shí)間:2022年02月16日 11:24:39   作者:做人要瀟灑一點(diǎn)  
本文主要介紹了Redis實(shí)現(xiàn)排名功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

之前在消費(fèi)金融平臺(tái)的時(shí)候,公司有一個(gè)專門給線下銷售人員使用的APP,APP記錄銷售推廣公司貸款產(chǎn)品賺取的傭金以及一些門店開拓和打卡的功能,后端是由我和另外一個(gè)同事開發(fā)的,其中有一個(gè)模塊是全國門店內(nèi)的銷售傭金實(shí)時(shí)排名,說到排名很多人的第一反應(yīng)都是這是個(gè)Top N的問題,從數(shù)據(jù)庫取出來用MySQL的top函數(shù)不就可以實(shí)現(xiàn)了,事實(shí)上當(dāng)時(shí)無法從表里取到數(shù)據(jù),數(shù)據(jù)還要配合權(quán)限,有全國和大區(qū)的排名,還需要計(jì)算大區(qū)經(jīng)理下所有人員的有效傭金,還要求是實(shí)時(shí)的,從數(shù)據(jù)庫讀取再計(jì)算肯定不行,跳到排名頁至少等待5s左右數(shù)據(jù)才能出來,那怎么辦呢,可以放Redis里,那么接下來我們一起看看如何用Redis實(shí)現(xiàn)這個(gè)排名功能。

一.實(shí)現(xiàn)思路

使用的是Redis里zset數(shù)據(jù)類型,zset的定義這里總結(jié)一下就是其每個(gè)元素都能夠關(guān)聯(lián)一個(gè)分?jǐn)?shù)而且還能夠針對(duì)集合元素進(jìn)行排序,所以這點(diǎn)很合適用來排序,接下來我們一起看看如何用其實(shí)現(xiàn)排名功能。

二.具體實(shí)現(xiàn)

1.添加數(shù)據(jù)的方法包裝

public ?void zAdd(String key,Object member,double score){
? ? try {
? ? ? ? ? redisTemplate.opsForZSet().add(key,member,score);
? ? } catch (Exception e) {
? ? ? ? log.error("redis zAdd has a error,key:{},value:{},score:{},exception:{}",key,member,score,e);
? ? }
}

2.獲取數(shù)據(jù)的方法包裝

public ?Set<Object> zRange(String key,int start,int end){
? ? try {
? ? //按照位置倒序取值和分?jǐn)?shù)
? ? ? ? Set<ZSetOperations.TypedTuple<Object>> typedTuples = redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
? ? ? ? if(typedTuples==null||typedTuples.size()==0) return null;
? ? ? ? return Collections.singleton(typedTuples);
? ? } catch (Exception e) {
? ? ? ? log.error("redis zRange has a error,key:{},start:{},end:{},exception:{}",
? ? ? ? ? ? ? ? key,start,end,e);
? ? ? ? return null;
? ? }
}

3.測(cè)試方法,亂序添加,如果想傭金從少到多在傭金前添加負(fù)號(hào)即可

redisUtils.zAdd("rank","王五",new Double("2000.00"));
redisUtils.zAdd("rank","張三",new Double("1000.00"));
redisUtils.zAdd("rank","王可",new Double("4000.00"));
redisUtils.zAdd("rank","向巧巧",new Double("6000.00"));
redisUtils.zAdd("rank","沙振華",new Double("7000.00"));
redisUtils.zAdd("rank","錢多多",new Double("5000.00"));
redisUtils.zAdd("rank","黃三",new Double("3000.00"));
redisUtils.zAdd("rank","高邱",new Double("8000.00"));
redisUtils.zAdd("rank","許晴",new Double("9000.00"));
redisUtils.zAdd("rank","包虎",new Double("10000.00"));
//獲取添加進(jìn)redis的數(shù)據(jù),使用上面2方法
Set<Object> rank = redisUtils.zRange("rank", 0, 9);
//todo 拿到數(shù)據(jù)進(jìn)行其他邏輯處理
//打印結(jié)果
rank.forEach(System.out::println);

4.執(zhí)行結(jié)果

[DefaultTypedTuple [score=10000.0, value=包虎],
DefaultTypedTuple [score=9000.0, value=許晴], 
DefaultTypedTuple [score=8000.0, value=高邱],
DefaultTypedTuple [score=7000.0, value=沙振華],
DefaultTypedTuple [score=6000.0, value=向巧巧],
DefaultTypedTuple [score=5000.0, value=錢多多],
DefaultTypedTuple [score=4000.0, value=王可], 
DefaultTypedTuple [score=3000.0, value=黃三], 
DefaultTypedTuple [score=2000.0, value=王五],
DefaultTypedTuple [score=1000.0, value=張三]]

小結(jié)

zset里除了計(jì)算排名的方法還有計(jì)算集合條件內(nèi)個(gè)數(shù)的zcount方法,查看集合總個(gè)數(shù)zcard方法等等,用起來還是很方便的,但是還是那句話具體的只能到具體的業(yè)務(wù)里才知道實(shí)用不,而且還要注意Redis有數(shù)據(jù)淘汰策略,這個(gè)點(diǎn)也千萬不要忽視了,還有就是針對(duì)已經(jīng)廢棄的業(yè)務(wù)數(shù)據(jù)還在緩存在Redis的里也要記得檢查和清除掉。

到此這篇關(guān)于Redis實(shí)現(xiàn)排名功能的示例代碼的文章就介紹到這了,更多相關(guān)Redis 排名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis教程(十三):管線詳解

    Redis教程(十三):管線詳解

    這篇文章主要介紹了Redis教程(十三):管線詳解,本文講解了請(qǐng)求應(yīng)答協(xié)議和RTT、管線(pipelining)、Benchmark等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Redis監(jiān)控工具RedisInsight安裝與使用

    Redis監(jiān)控工具RedisInsight安裝與使用

    這篇文章主要為大家介紹了Redis監(jiān)控工具RedisInsight的安裝步驟與使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • springboot使用Redis作緩存使用入門教程

    springboot使用Redis作緩存使用入門教程

    這篇文章主要介紹了springboot使用Redis作緩存使用入門教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Redis安全策略詳解

    Redis安全策略詳解

    緩存穿透是指當(dāng)用戶在查詢一條數(shù)據(jù)的時(shí)候,而此時(shí)數(shù)據(jù)庫和緩存卻沒有關(guān)于這條數(shù)據(jù)的任何記錄,而這條數(shù)據(jù)在緩存中沒找到就會(huì)向數(shù)據(jù)庫請(qǐng)求獲取數(shù)據(jù)。用戶拿不到數(shù)據(jù)時(shí),就會(huì)一直發(fā)請(qǐng)求,查詢數(shù)據(jù)庫,這樣會(huì)對(duì)數(shù)據(jù)庫的訪問造成很大的壓力
    2022-07-07
  • Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS的實(shí)現(xiàn)示例

    Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS的實(shí)現(xiàn)示例

    Redis沒有直接復(fù)用C語言的字符串,而是新建了SDS,本文主要介紹了Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Redis list 類型學(xué)習(xí)筆記與總結(jié)

    Redis list 類型學(xué)習(xí)筆記與總結(jié)

    這篇文章主要介紹了Redis list 類型學(xué)習(xí)筆記與總結(jié),本文著重講解了關(guān)于List的一些常用方法,比如lpush 方法、lrange 方法、rpush 方法、linsert 方法、 lset 方法等,需要的朋友可以參考下
    2015-06-06
  • Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié)

    Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié)

    這篇文章主要介紹了Redis String 類型和 Hash 類型學(xué)習(xí)筆記與總結(jié),本文分別對(duì)String 類型的一些方法和Hash 類型做了詳細(xì)介紹,需要的朋友可以參考下
    2015-06-06
  • Redis執(zhí)行Lua腳本的好處與示例代碼

    Redis執(zhí)行Lua腳本的好處與示例代碼

    Redis在2.6推出了腳本功能,允許開發(fā)者使用Lua語言編寫腳本傳到Redis中執(zhí)行。下面這篇文章主要給大家介紹了關(guān)于Redis執(zhí)行Lua腳本的好處與示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • 利用Redis進(jìn)行數(shù)據(jù)緩存的項(xiàng)目實(shí)踐

    利用Redis進(jìn)行數(shù)據(jù)緩存的項(xiàng)目實(shí)踐

    在實(shí)際的業(yè)務(wù)場(chǎng)景中,Redis 一般和其他數(shù)據(jù)庫搭配使用,用來減輕后端數(shù)據(jù)庫的壓力,本文就介紹了利用Redis進(jìn)行數(shù)據(jù)緩存的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-06-06
  • redis過期回調(diào)坑的解決

    redis過期回調(diào)坑的解決

    Redis提供了一種過期回調(diào)的機(jī)制,可以在某個(gè)鍵過期時(shí)觸發(fā)一個(gè)回調(diào)函數(shù),然而,在實(shí)際使用中,我們往往會(huì)遇到一些災(zāi)難性的問題,其中一個(gè)就是在使用過期回調(diào)的時(shí)候,我們可能會(huì)遭遇到無法預(yù)料的錯(cuò)誤,本文就詳細(xì)的介紹一下
    2023-09-09

最新評(píng)論