Redis监听Key的过期事件

唠嗑:这边文章是因为前短时间在网上看到的监听Key失效,可以做订单超过未支付修改状态,库存回退等,做个学习记录。

原文地址:https://blog.csdn.net/u014494148/article/details/116310566

那就开始吧—>先要安装好redis哦,我之前的文章写过安装redis和提供了安装压缩包,没有的小伙伴可以看一下。
1.找到redis的redis.windows.conf文件 打开找到notify-keyspace-events改成 notify-keyspace-events Ex
这里的 EX代表 expire 和 evicted 过期和驱逐 的时间监听 ,注意:改了配置要重启Redis


修改文件.png
修改内容.png

配置Redis监听器
注册 RedisMessageListenerContainer ,为Redis消息侦听器提供异步行为的容器

@Configuration
public class RedisConfig {

    /**
     * 注册一个Redis消息监听器交给Spring管理
     * @param connectionFactory
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        //Redis消息监听器
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        //设置Redis链接工厂
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

定义key过期的监听器 通过继承 KeyExpirationEventMessageListener 来完成

//消息过期监听器
@Component
public class RedisExpireListener extends KeyExpirationEventMessageListener {

    public RedisExpireListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }



    //当消息过期,触发方法
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        System.out.println("Key -> "+expiredKey +"过期了...");
    }
}

测试代码 ——>保存的key可以是跟数据库相关的id啊,订单编码什么之类的。

/**
     * 测试redis监控key,实现超时任务处理
     */
    @Test
    public void test4(){
        TUser tUser = new TUser();
        tUser.setAge(20);
        tUser.setName("张三");
        tUser.setPassword("123");
        //存 key=name value=tUser 过期时间等于10秒的   
        redisTemplate.opsForValue().set("name",tUser,10, TimeUnit.SECONDS);
    }

输出结果


测试结果.png

总结:这是我在网上看到的,觉得写的很好,自己实现了一把,然后记录的文章,原文的话可以看我上面的注明的网址,谢谢大家。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容