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

控制Redis的hash的field中的過期時間

 更新時間:2023年01月19日 08:43:30   作者:好大的月亮  
這篇文章主要介紹了控制Redis的hash的field中的過期時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

需求場景

在業(yè)務(wù)中有些數(shù)據(jù)因為歷史原因用的hash結(jié)構(gòu)存儲數(shù)據(jù),但是后期需求要求其中某個field需要按照一些規(guī)則去過期,這個時候原來的邏輯懶得改,可以利用redisZset或者mq的延時隊列去做過期設(shè)置.

方案一使用redis的Zset配置定時任務(wù)

撈個圖

demo需要清緩存的redishash結(jié)構(gòu)如下

然后我們再每次往Agent這個hash結(jié)構(gòu)存儲數(shù)據(jù)的時候,同時向AgentExpirekeyZSET數(shù)據(jù)結(jié)構(gòu)存儲一份數(shù)據(jù)(在存數(shù)據(jù)的時候可以在當(dāng)前時間上增加過期時間),這個數(shù)據(jù)的keyhash結(jié)構(gòu)中的field的值,value是過期時間戳(毫秒級)

如下圖所示:

然后用一個定時任務(wù)(我這里用的xxl-job,大家可以自己選擇)定時去掃描這個ZSET里面score小于當(dāng)前時間的元素,也就是使用ZSETrangeByScore命令:

上面在向Zset中存數(shù)據(jù)的時候已經(jīng)增加了過期時間,那么當(dāng)時間小于當(dāng)前時間時就過期了,代表hash中對應(yīng)field的數(shù)據(jù)要被delete

long currentTimeMillis = System.currentTimeMillis();

//掃描key為AgentExpire的zset中時間在 0~currentTimeMillis當(dāng)前時間范圍內(nèi)的數(shù)據(jù)
Set<String> keys = redisTemplate.opsForZSet().rangeByScore("AgentExpire", 0, currentTimeMillis);

//然后遍歷刪除即可                            
for (String key : keys) {
    Boolean hashResult = stringRedisTemplate.opsForHash().hasKey("xxxxxx", key);
    if(hashResult){
        stringRedisTemplate.opsForHash().delete(recommenKey, key);
        stringRedisTemplate.opsForZSet().remove(SelectionRecommenAspect.selectionRecommendZset, key);
    }
}

方案二使用mq延時隊列

延時隊列的配置可以參考我另一篇文章

http://m.fzitv.net/article/273145.htm

在延時隊列消費者處增加上述過期代碼即可

long currentTimeMillis = System.currentTimeMillis();
Set<String> expireKeys = 
//掃描key為AgentExpire的zset中時間在 0~currentTimeMillis當(dāng)前時間范圍內(nèi)的數(shù)據(jù)
redisTemplate.opsForZSet().rangeByScore("AgentExpire", 0, currentTimeMillis);

綜上

使用zset的話開發(fā)量少,但是定時job一直刷容易浪費資源,mq延時隊列更精確

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)

    Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)

    這篇文章主要介紹了Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Redis實戰(zhàn)之Redis實現(xiàn)異步秒殺優(yōu)化詳解

    Redis實戰(zhàn)之Redis實現(xiàn)異步秒殺優(yōu)化詳解

    這篇文章主要給大家介紹了Redis實戰(zhàn)之Redis實現(xiàn)異步秒殺優(yōu)化方法,文章通過圖片和代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以自己動手試一下
    2023-09-09
  • Redis限流的幾種實現(xiàn)

    Redis限流的幾種實現(xiàn)

    面對越來越多的高并發(fā)場景,限流顯示的尤為重要,限流有許多種實現(xiàn)的方式,Redis具有很強(qiáng)大的功能,本文就詳細(xì)的介紹幾種方式,感興趣的可以了解一下
    2021-12-12
  • redis事務(wù)常用操作詳解

    redis事務(wù)常用操作詳解

    在本篇文章里小編給大家分享了關(guān)于redis事務(wù)常用操作的相關(guān)知識點內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2019-07-07
  • Redis集群的相關(guān)詳解

    Redis集群的相關(guān)詳解

    這篇文章主要介紹了Redis集群的相關(guān),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用redis lua腳本實現(xiàn)時間窗分布式限流

    利用redis lua腳本實現(xiàn)時間窗分布式限流

    Lua是一種輕量小巧的腳本語言,Redis是高性能的key-value內(nèi)存數(shù)據(jù)庫,在部分場景下,是對關(guān)系數(shù)據(jù)庫的良好補(bǔ)充,本文給大家介紹了如何利用redis lua腳本實現(xiàn)時間窗分布式限流,需要的朋友可以參考下
    2024-03-03
  • Redis緩存數(shù)據(jù)庫表(列單獨緩存)的示例代碼

    Redis緩存數(shù)據(jù)庫表(列單獨緩存)的示例代碼

    在Redis中緩存數(shù)據(jù)庫表數(shù)據(jù),而不使用JSON結(jié)構(gòu)來表示value,通常意味著我們會將數(shù)據(jù)庫表的每一行數(shù)據(jù)映射為Redis中的一個或多個鍵值對,這篇文章主要介紹了Redis緩存數(shù)據(jù)庫表(列單獨緩存),需要的朋友可以參考下
    2024-03-03
  • Redis消息隊列、阻塞隊列、延時隊列的實現(xiàn)

    Redis消息隊列、阻塞隊列、延時隊列的實現(xiàn)

    Redis是一種常用的內(nèi)存數(shù)據(jù)庫,它提供了豐富的功能,通常用于數(shù)據(jù)緩存和分布式隊列,本文主要介紹了Redis消息隊列、阻塞隊列、延時隊列的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • Redis中Redisson布隆過濾器的學(xué)習(xí)

    Redis中Redisson布隆過濾器的學(xué)習(xí)

    布隆過濾器是一個非常長的二進(jìn)制向量和一系列隨機(jī)哈希函數(shù)的組合,可用于檢索一個元素是否存在,本文就詳細(xì)的介紹一下Redisson布隆過濾器,具有一定的參考價值,感興趣的可以了解一下
    2022-05-05
  • 簡介Redis中的showlog功能

    簡介Redis中的showlog功能

    這篇文章主要介紹了簡介Redis中的showlog功能,作者同時對比了DEL命令的性能,需要的朋友可以參考下
    2015-06-06

最新評論

方正县| 郓城县| 五河县| 阿坝县| 龙海市| 鹰潭市| 铁岭市| 富民县| 清远市| 赤峰市| 大关县| 图们市| 大荔县| 巴东县| 德令哈市| 新安县| 邢台市| 日土县| 松阳县| 枣阳市| 普兰县| 社旗县| 兴宁市| 汉源县| 鹤岗市| 塔城市| 浑源县| 曲沃县| 准格尔旗| 西林县| 阳朔县| 安福县| 青龙| 如皋市| 弥勒县| 仪征市| 郁南县| 吉木萨尔县| 藁城市| 阿图什市| 宣威市|