redis中key過期的事件觸發(fā)

一、redis簡介
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)曾雕。
Redis是一個開源的使用ANSI C語言編寫球昨、遵守BSD協(xié)議笔呀、支持網(wǎng)絡(luò)灵巧、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫官觅,并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器阐污,因為值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型休涤。

二、redis的key過期的事件觸發(fā)
過期事件通過Redis的訂閱與發(fā)布功能(pub/sub)來進行分發(fā)笛辟。

  1. redis服務(wù)端配置
    超時的監(jiān)聽功氨,并不需要自己發(fā)布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex手幢,默認為notify-keyspace-events ""

image.png

修改好配置文件后捷凄,redis會對設(shè)置了expire的數(shù)據(jù)進行監(jiān)聽,當(dāng)數(shù)據(jù)過期時便會將其從redis中刪除

我使用的redis的版本:
image.png

配置事件監(jiān)聽
如圖:


image.png

2.java實現(xiàn)redis中key過期事件觸發(fā)

a.創(chuàng)建一個實現(xiàn)類繼承KeyExpirationEventMessageListener

package com.focussend.weixin.utils;

import com.focussend.contacts.service.FissionMarketingService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * Created by Administrator on 2019/2/26.
 */
@Component
class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Resource
    private FissionMarketingService fissionMarketingService;
    private Logger logger = LoggerFactory.getLogger(RedisKeyExpirationListener.class);

    private final Object fanNumUpdate = new Object();
    /**
     * 針對redis數(shù)據(jù)失效事件围来,進行數(shù)據(jù)處理
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 用戶做自己的業(yè)務(wù)處理即可,注意message.toString()可以獲取失效的key
           String expiredKey = message.toString();
                   logger.info("此處根據(jù)對應(yīng)的redis的key去處理業(yè)務(wù)邏輯");
       }
}

b. 注入RedisMessageListenerContainer
方法一跺涤、使用xml增加的相關(guān)配置

            <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
                 <property name="connectionFactory" ref="jedisConnectionFactory" />
            </bean>

方法二、使用config類

/**
 * Redis緩存配置類
 */
@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }

}

三监透、測試
向redis中存入一個key和value并設(shè)置過期時間桶错,key過期后會觸發(fā)onMessage(Message message, byte[] pattern) 方法
redisCacheManagerTool.set("test_renjiao","haha",20);

四、備注
如果服務(wù)宕機胀蛮,那么將接收不到redis推送過來的事件也就無法處理redis過期后的邏輯院刁。我們可以采用redis+定時任務(wù)處理,這樣可以避免服務(wù)宕機醇滥,Redis過期事件推送處理的問題黎比,也能夠提高系統(tǒng)整體性能(可以去了解一下redis的key過期策略)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸳玩,一起剝皮案震驚了整個濱河市阅虫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌不跟,老刑警劉巖颓帝,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡购城,警方通過查閱死者的電腦和手機吕座,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘪板,“玉大人吴趴,你說我怎么就攤上這事∥昱剩” “怎么了锣枝?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兰英。 經(jīng)常有香客問我撇叁,道長,這世上最難降的妖魔是什么畦贸? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任陨闹,我火速辦了婚禮,結(jié)果婚禮上薄坏,老公的妹妹穿的比我還像新娘趋厉。我一直安慰自己,他們只是感情好胶坠,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布觅廓。 她就那樣靜靜地躺著,像睡著了一般涵但。 火紅的嫁衣襯著肌膚如雪杈绸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天矮瘟,我揣著相機與錄音瞳脓,去河邊找鬼。 笑死澈侠,一個胖子當(dāng)著我的面吹牛劫侧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哨啃,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼烧栋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拳球?” 一聲冷哼從身側(cè)響起审姓,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祝峻,沒想到半個月后魔吐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扎筒,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年酬姆,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗜桌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡辞色,死狀恐怖骨宠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情相满,我是刑警寧澤诱篷,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站雳灵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闸盔。R本人自食惡果不足惜悯辙,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迎吵。 院中可真熱鬧躲撰,春花似錦、人聲如沸击费。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔫巩。三九已至谆棱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圆仔,已是汗流浹背垃瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坪郭,地道東北人个从。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像歪沃,于是被迫代替她去往敵國和親嗦锐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • RedisRedis命令參考網(wǎng)址:http://doc.redisfans.com/ Redis 簡介Redis ...
    野柳閱讀 1,132評論 0 9
  • 我的應(yīng)用場景:因為業(yè)務(wù)需求沪曙,我們會每10分鐘從kafka得到數(shù)據(jù)開始處理奕污,這時就會存在一種情況,如果kafka數(shù)據(jù)...
    szgl_lucifer閱讀 7,343評論 0 3
  • 緩存是最直接有效提升系統(tǒng)性能的手段之一液走。個人認為用好用對緩存是優(yōu)秀程序員的必備基本素質(zhì)菊值。 本文結(jié)合實際開發(fā)經(jīng)驗外驱,從...
    Java小生閱讀 815評論 1 3
  • 重點參考鏈接: http://www.cnblogs.com/wangyuyu/p/3786236.html Re...
    Kevin_Junbaozi閱讀 2,187評論 0 21
  • 提燈 金桔覺得自己好像被一股氣流托著,正在緩緩下降腻窒,正難過著的金桔慢慢降落在了地上昵宇,她坐了下來,坐在地上儿子。這地面給...
    smile啦啦啦啦閱讀 505評論 0 7