【SpringBoot】35、SpringBoot整合Redis监听Key过期事件「建议收藏」

【SpringBoot】35、SpringBoot整合Redis监听Key过期事件「建议收藏」在实际的开发项目中,监听key的过期事件,应用非常广泛,例如:订单超时未支付,优惠券过期等等一、修改Redis配置文件1、在Redis的安装目录2、找到redis.windows.conf文件,搜索“notify-keyspace-events”修改为“notify-keyspace-eventsEx”,这样我们的Redis就支持key过期事件的监听了二、注入redisMessageListenerContainer注意:本偏文章衔接与上篇文章:【Sprin

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在实际的开发项目中,监听 key 的过期事件,应用非常广泛,例如:订单超时未支付,优惠券过期等等

一、说明

本篇文章是继:
【SpringBoot】三十四、SpringBoot整合Redis实现序列化存储Java对象
其中涉及到的知识及代码,本篇文章不再进行赘述

二、修改 Redis 配置文件

  • 1、在 Redis 的安装目录
    配置文件
  • 2、找到 redis.windows.conf 文件,搜索 “notify-keyspace-events”

修改配置文件
修改为 “notify-keyspace-events Ex”,这样我们的 Redis 就支持 key 过期事件的监听了

三、注入redisMessageListenerContainer

注意:本偏文章衔接与上篇文章:【SpringBoot】三十四、SpringBoot整合Redis实现序列化存储Java对象,其中的配置信息本篇文章不在赘述

  • 1、还是在 RedisConfig.java 中注入一个 redisMessageListenerContainer 的Bean 用于监听
@Bean
RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { 
   
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    // 监听所有库的key过期事件
    container.setConnectionFactory(connectionFactory);
    return container;
}
  • 2、创建监听类RedisKeyExpirationListener

我们需要创建监听 key 过期类,来实现当事件触发时的具体操作

package com.zyxx.common.redis;

import lombok.extern.slf4j.Slf4j;
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;

/** * 监听 Redis key 过期事件 * * @Author Lizhou */
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { 
   

    public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) { 
   
        super(redisMessageListenerContainer);
    }

    /** * 针对 redis 数据失效事件,进行数据处理 */
    @Override
    public void onMessage(Message message, byte[] pattern) { 
   
        // 拿到key
        log.info("监听Redis key过期,key:{},channel:{}", message.toString(), new String(pattern));
    }
}

我们可以监听到过期的 key 的信息,以及通道的信息

  • 3、操作 API
RedisUtils 中加入如下操作

```java
/** * 写入数据,并设置过期时间 */
public boolean set(final String key, Object value, long time) { 
   
    if (StringUtils.isBlank(key)) { 
   
        return false;
    }
    try { 
   
        template.opsForValue().set(key, value, time, TimeUnit.SECONDS);
        log.info("存入redis成功,key:{},value:{}", key, value);
        return true;
    } catch (Exception e) { 
   
        log.error("存入redis失败,key:{},value:{}", key, value);
        e.printStackTrace();
    }
    return false;
}

借助此方法,我们可以向 Redis 中存入数据,并设置过期时间,单位为:秒(S)

四、测试

  • 1、测试用例
package com.zyxx.redistest;

import com.zyxx.redistest.common.RedisUtils;
import com.zyxx.redistest.common.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
class RedisTestApplicationTests { 
   

    @Autowired
    private RedisUtils redisUtil;

    @Test
    void contextLoads() { 
   
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setName("jack");
        userInfo.setCreateTime(new Date());
        // 放入redis,并设置过期时间为5秒
        redisUtil.set("user", userInfo, 5);
    }
}

我们向 Redis 中存入了一个 key 为 “user”,value 为 UserInfo 对象的数据,并设置了过期时间为 5 秒

注意:在测试之前,我们需要启动我们的项目,才能将 Bean 注入到我们的容器中,监听事件才会生效

  • 2、测试结果
    存入数据
    可以看出我们的数据存入 Redis 成功

5秒后…

监听事件
触发了 key 过期事件,这时候,我们拿到过期的 key 就可以对应的做一些业务处理了

如您在阅读中发现不足,欢迎留言!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190513.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用MicrobiomeAnalyst统计和功能分析微生物组数据

    使用MicrobiomeAnalyst统计和功能分析微生物组数据文章目录使用MicrobiomeAnalyst进行微生物组数据的全面统计、功能和元分析 摘要 背景Introduction 分析流程和界面设计 图1MicrobiomeAnalyst工作流程概述。 图2全面的数据分析和报告生成 与其他网页工具比较 表1比较MicrobiomeAnalyst和其他三种网页工具对微生物组数据分析的流程 局限性 实验设计 综合分析16SrRNA丰度数据 基因丰度数据的功能分析和网络可视化 与公共数据集的

  • yum安装与卸载软件常见命令「建议收藏」

    yum安装与卸载软件常见命令「建议收藏」1.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的。安装的命令是,yuminstall~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断;删除的命令是,yumremove~,同安装一样,yum也会查询数据库,给出解决依赖关…

  • centos7安装python3.8_centos python3安装

    centos7安装python3.8_centos python3安装centos7自带版本是python2.7centos8是自带python3的如果要用的3.0以上的版本需要手动安装,下载地址:https://www.python.org/ftp/python/1、先查看系统python的位置在哪儿whereispythonpython2.7默认安装是在/usr/bin目录中,切换到/usr/bin/cd/usr/bin/llpython*从下面的图中我们可以看到,python指向的是python2,python2指向的是python2.7,因此

  • 《大话数据结构》目录[通俗易懂]

    《大话数据结构》目录[通俗易懂]由于目录中有比较复杂的格式,所以只能用PDF的形式提供。http://files.cnblogs.com/cj723/%E7%9B%AE%E5%BD%95.pdf

  • Python学习总结之基础语法知识汇总(一)

    Python学习总结之基础语法知识汇总(一)本文章包含了Python一系列基本知识,其中包括:基本数据类型(整数,浮点数,复数,字符串);分支语句;异常处理;函数;局部变量与全局变量;递归;组合数据类型(集合,元组,列表,字典);文件基本操作基本数据类型一,数字类型及操作(1)整数类型可正可负,无取值范围限制pow(x,y):计算x^y(2)浮点数类型存在不确定尾数 rou…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号