最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

之前在消費(fèi)金融平臺(tái)的時(shí)候,公司有一個(gè)專門給線下銷售人員使用的APP,APP記錄銷售推廣公司貸款產(chǎn)品賺取的傭金以及一些門店開拓和打卡的功能,后端是由我和另外一個(gè)同事開發(fā)的,其中有一個(gè)模塊是全國(guó)門店內(nèi)的銷售傭金實(shí)時(shí)排名,說(shuō)到排名很多人的第一反應(yīng)都是這是個(gè)Top N的問題,從數(shù)據(jù)庫(kù)取出來(lái)用MySQL的top函數(shù)不就可以實(shí)現(xiàn)了,事實(shí)上當(dāng)時(shí)無(wú)法從表里取到數(shù)據(jù),數(shù)據(jù)還要配合權(quán)限,有全國(guó)和大區(qū)的排名,還需要計(jì)算大區(qū)經(jīng)理下所有人員的有效傭金,還要求是實(shí)時(shí)的,從數(shù)據(jù)庫(kù)讀取再計(jì)算肯定不行,跳到排名頁(yè)至少等待5s左右數(shù)據(jù)才能出來(lái),那怎么辦呢,可以放Redis里,那么接下來(lái)我們一起看看如何用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)很合適用來(lái)排序,接下來(lái)我們一起看看如何用其實(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方法等等,用起來(lái)還是很方便的,但是還是那句話具體的只能到具體的業(yè)務(wù)里才知道實(shí)用不,而且還要注意Redis有數(shù)據(jù)淘汰策略,這個(gè)點(diǎn)也千萬(wà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在計(jì)數(shù)器和人員記錄的事務(wù)操作應(yīng)用小結(jié)

    Redis在計(jì)數(shù)器和人員記錄的事務(wù)操作應(yīng)用小結(jié)

    Redis是一個(gè)高性能的鍵值存儲(chǔ)系統(tǒng),專于處理計(jì)數(shù)器和事務(wù)操作,它提供了INCR、DECR等命令來(lái)進(jìn)行原子遞增或遞減操作,并通過(guò)MULTI、EXEC等命令實(shí)現(xiàn)事務(wù)操作,此外,Redis的Pipeline功能可減少網(wǎng)絡(luò)往返次數(shù),提高性能
    2024-10-10
  • SpringBoot整合Redis實(shí)現(xiàn)序列化存儲(chǔ)Java對(duì)象的操作方法

    SpringBoot整合Redis實(shí)現(xiàn)序列化存儲(chǔ)Java對(duì)象的操作方法

    這篇文章主要介紹了SpringBoot整合Redis實(shí)現(xiàn)序列化存儲(chǔ)Java對(duì)象,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Redis主從配置和底層實(shí)現(xiàn)原理解析(實(shí)戰(zhàn)記錄)

    Redis主從配置和底層實(shí)現(xiàn)原理解析(實(shí)戰(zhàn)記錄)

    今天給大家分享Redis主從配置和底層實(shí)現(xiàn)原理解析,本文通過(guò)實(shí)戰(zhàn)項(xiàng)目給大家源碼解析,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • 單線程Redis快的4 個(gè)原因總結(jié)

    單線程Redis快的4 個(gè)原因總結(jié)

    作為內(nèi)存中數(shù)據(jù)存儲(chǔ),Redis 以其速度和性能著稱,通常被用作大多數(shù)后端服務(wù)的緩存解決方案,但是,在內(nèi)部,Redis 采用單線程架構(gòu),為什么單線程設(shè)計(jì)依然會(huì)有這么高的性能,在本文中,讓我們深入探討為什么 Redis 才有單線程架構(gòu)
    2023-07-07
  • 使用Redis實(shí)現(xiàn)分布式鎖的方法

    使用Redis實(shí)現(xiàn)分布式鎖的方法

    為了保證我們線上服務(wù)的并發(fā)性和安全性,目前我們的服務(wù)一般拋棄了單體應(yīng)用,采用的都是擴(kuò)展性很強(qiáng)的分布式架構(gòu),這篇文章主要介紹了使用Redis實(shí)現(xiàn)分布式鎖的方法,需要的朋友可以參考下
    2022-06-06
  • IDEA初次連接Redis配置的實(shí)現(xiàn)

    IDEA初次連接Redis配置的實(shí)現(xiàn)

    本文主要介紹了IDEA初次連接Redis配置的實(shí)現(xiàn),文中通過(guò)圖文步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • redis 過(guò)期策略及內(nèi)存回收機(jī)制解析

    redis 過(guò)期策略及內(nèi)存回收機(jī)制解析

    這篇文章主要介紹了redis 過(guò)期策略及內(nèi)存回收機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Redis教程(二):String數(shù)據(jù)類型

    Redis教程(二):String數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(二):String數(shù)據(jù)類型,本文講解了String數(shù)據(jù)類型概述、相關(guān)命令列表、命令使用示例三部分內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Redis高可用的三種實(shí)現(xiàn)方式

    Redis高可用的三種實(shí)現(xiàn)方式

    在實(shí)際生產(chǎn)環(huán)境中為保證Redis的服務(wù)連續(xù)性和可靠性,需要設(shè)計(jì)一個(gè)高可用架構(gòu),本文就來(lái)介紹一下Redis高可用的三種實(shí)現(xiàn)方式,主要包括主從復(fù)制模式,Redis Sentinel模式和Redis Cluster模式,感興趣的可以了解一下
    2023-12-12
  • Redis 基礎(chǔ)教程之事務(wù)的使用方法

    Redis 基礎(chǔ)教程之事務(wù)的使用方法

    這篇文章主要介紹了Redis 基礎(chǔ)教程之事務(wù)的使用方法的相關(guān)資料,Redis 事務(wù)可以一次執(zhí)行多個(gè)命令和保證,單獨(dú)的隔離操作和原子操作需要的朋友可以參考下
    2017-08-08

最新評(píng)論

宝清县| 湘潭县| 清丰县| 西青区| 乐陵市| 武穴市| 罗定市| 龙岩市| 通榆县| 花莲市| 库尔勒市| 奈曼旗| 古浪县| 朝阳区| 浏阳市| 建宁县| 仁布县| 罗定市| 霍邱县| 嵩明县| 北票市| 景德镇市| 防城港市| 科尔| 方山县| 巴东县| 林芝县| 巴青县| 扎鲁特旗| 黄浦区| 宜阳县| 浠水县| 五河县| 昌图县| 环江| 玉环县| 平湖市| 百色市| 仙游县| 都安| 阿鲁科尔沁旗|