SpringBoot项目监听reids中过期的key

使用redission客户端操作redis
 

maven依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.2.8.RELEASE</version>
</dependency>
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.9.0</version><optional>true</optional>
</dependency>
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.9.0</version>
</dependency>

redis配置文件

#Redisson配置
singleServerConfig:address: "redis://127.0.0.1:6379"password: 123456clientName: nulldatabase: 0 #选择使用哪个数据库0~15idleConnectionTimeout: 10000pingTimeout: 30000connectTimeout: 10000timeout: 30000retryAttempts: 30retryInterval: 1500reconnectionTimeout: 3000failedAttempts: 30subscriptionsPerConnection: 5subscriptionConnectionMinimumIdleSize: 1subscriptionConnectionPoolSize: 50connectionMinimumIdleSize: 200connectionPoolSize: 2000dnsMonitoringInterval: 5000#dnsMonitoring: falsethreads: 2
nettyThreads: 2
codec:class: "org.redisson.client.codec.StringCodec"
transportMode: "NIO"

配置类文件主要有三个
 

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import java.io.IOException;@Configuration
public class RedissonConfig {@Bean@Primarypublic RedissonClient redisson() throws IOException {// 本例子使用的是yaml格式的配置文件,读取使用Config.fromYAML,如果是Json文件,则使用Config.fromJSONConfig config = Config.fromYAML(RedissonConfig.class.getClassLoader().getResource("redisson-config.yml"));return Redisson.create(config);}
}
import org.redisson.api.RedissonClient;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;@Configuration
public class RedisListenerConfig {@Autowiredprivate RedissonClient redisson;@Beanpublic RedisMessageListenerContainer redisMessageListenerContainer(MessageListener listener) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(new RedissonConnectionFactory(redisson));// 添加 KeyExpirationListener 到监听器容器container.addMessageListener(listener, new PatternTopic("__keyevent@*:expired"));return container;}
}
import cn.hutool.core.collection.CollectionUtil;
import com.hs.customer.constant.RedisCacheKey;
import com.hs.customer.dao.TUserDAO;
import com.hs.customer.enums.RoleCodeType;
import com.hs.customer.pojo.dto.UserAllDTO;
import com.hs.customer.service.impl.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;@Component
@Slf4j
public class KeyExpirationListener implements MessageListener {@Overridepublic void onMessage(Message message, byte[] bytes) {String expiredKey = new String(message.getBody());log.info("onMessage --> redis 过期的key是:{}", expiredKey);try {} catch (Exception e) {e.printStackTrace();}}
}

*****需要修改redis的配置文件 notify-keyspace-events "Ex"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3的v-model说明和使用方法

Vue 3 的 v-model 是一个语法糖&#xff0c;它为表单输入和应用状态之间创建了双向绑定。这样&#xff0c;当用户在表单中输入时&#xff0c;数据会自动更新&#xff0c;反之亦然。 说明 在 Vue 3 中&#xff0c;v-model 实际上是基于 value 属性和 input 事件实现的。这意味…

Python 因果推断(上)

引言 原文&#xff1a;causal-methods.github.io/Book/Introduction.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Vitor Kamada 电子邮件&#xff1a;econometrics.methodsgmail.com 最后更新日期&#xff1a;2020 年 8 月 15 日 这本书是使…

jupyter出现问题ModuleNotFoundError: No module named ‘exceptiongroup‘

今天使用pyg的jupyter环境发现这个环境没法用, 所以只能把这个kernel给重删了然后再装&#xff0c;操作记录如下 查看kernel jupyter kernelspec list注意不是jupyter kernel --list 需要加关键字spec, 删除kernel jupyter kernelspec remove pyg当重新安装这个kernel时可能…

阿里云云上微服务 EDAS接入使用以及注意事项

阿里云分布式应用服务&#xff08;EDAS, Elastic Distributed Application Service&#xff09;是阿里云提供的一款支持微服务架构的PaaS平台&#xff0c;它帮助用户在云端构建、部署和管理分布式应用。接入EDAS并使用其进行云上微服务管理主要包括以下步骤及注意事项&#xff…

Qt容器类

一、概述 用来存储其他的类或者数据。存储基础的int&#xff0c;float类型&#xff0c;也可以是QString&#xff0c;QDate类型。Qt的容器类比STL(标准模板库)中的容器类更轻巧、安全和易于使用。 Qt的容器类分为顺序容器&#xff08;sequential containers&#xff09;和关联容…

Redis -- 常用数据结构,认识数据类型和编码方式

"人生就像骑自行车&#xff0c;要保持平衡&#xff0c;就必须保持前进。" — 爱因斯坦 说到数据结构&#xff0c;或许就能想到哈希表&#xff0c;列表集合等数据结构。对于redis来说对应的key的value的形式也可以是这些数据结构&#xff0c;如下&#xff1a; 针对上面…

深度学习:机器学习的革命性突破

深度学习&#xff08;Deep Learning&#xff09;是机器学习领域中的一个新的研究方向&#xff0c;主要是通过建立类似于人脑的神经网络来模仿人类的感知、记忆、理解和生成等能力。深度学习的核心是神经网络&#xff0c;它能够从大量的数据中自动提取有用的特征&#xff0c;并基…

导出Mysql数据库表名和字段并合并成一个word

参考链接&#xff1a; 导出MySQL数据库所有库和字段注释及相关信息为word文档——工具类 java - Apache POI - How to copy tables from one docx to another docx - Stack Overflow 领导让我研究下一个低代码平台的代码&#xff0c;我就想着做一个把数据库字段直接导出来的…

【论文阅读】Long-Tailed Recognition via Weight Balancing(CVPR2022)附MaxNorm的代码

目录 论文使用方法weight decayMaxNorm 如果使用原来的代码报错的可以看下面这个 论文 问题&#xff1a;真实世界中普遍存在长尾识别问题&#xff0c;朴素训练产生的模型在更高准确率方面偏向于普通类&#xff0c;导致稀有的类别准确率偏低。 key:解决LTR的关键是平衡各方面&a…

Android 12 系统开机动画

一、查找Android系统提供的开机动画 在Android系统源码目录下输入 find ./ -name "bootanimation.zip" 如图所示 所输出的路劲即为bootanimation.zip所在路径&#xff0c;每个系统都不一样&#xff0c;建议用命令查找 二、复制到对应目录下 android12\out\target\…

AIGC,ChatGPT4 实际需求效办公自动化函数应用

用实际需求来给大家演示一下ChatGPT如何助力办应用。 首先我们来提取年份值 我们将公式复制到表格即可。 接下来进行向下填充。 就得到了所有年份&#xff0c; 接下来我们完成第二个需求&#xff0c;按年份统计销售额。 Prompt&#xff1a;有一个表格C列是年份&#xff0c;D列…

【干货】【常用电子元器件介绍】【电容】(二)--电容器的主要参数、测量、选择与应用

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。 一、 电容器的主要参数 1.1 耐压 耐压(Voltage Rating)是指电容器在电路中长期有效地工作而不被击穿所能承受的最大直流电压。对于结构、介质、容量相同的…

【计算机网络】网络的网络

网络的网络 客户 customer 接入ISP提供商 provider 全球承载ISP多个ISP的层级结构 第一层ISP &#xff08;tier-1 ISP &#xff09; 位于顶部 区域ISP &#xff08;reginal ISP&#xff09;Level 3通信 &#xff0c;AT&T&#xff0c;Sprint &#xff0c;NTT存在点&#x…

关于痛苦。

追寻幸福是一件好事&#xff0c;但是学会向痛苦靠拢也很重要。 ”痛苦是老师“&#xff0c;生活中的各种反馈持续的训练着我们&#xff0c;并且是无意识的。我们对痛苦感到厌恶&#xff0c;我们喜欢多巴胺的冲击&#xff0c;而我们的习惯就是从这些和其他大脑的化学物质中滋养…

Spring AOP实现

Spring AOP实现 AOP概述什么是AOP什么是Spring AOP Spring AOP快速入门引入依赖实现计时器 Spring AOP详解Spring AOP核心概念切点(Pointcut)连接点(Join Point)通知(Advice)切面(Aspect) 通知类型注意事项 PointCut多个切面切面优先级 Order切点表达式execution表达式annotati…

Ubuntu 隐藏Telnet主机SSH服务时显示版本信息问题

一、背景 默认情况下&#xff0c;我们通过telnet服务器的22端口&#xff0c;能够获取OpenSSH服务的banner信息(如下图所示)。而低版本的OpenSSH存在许多高危漏洞。。为了安全我们要隐藏这个信息。 二、隐藏Telnet版本信息 当使用telnet命令&#xff0c;telnet 192.168.31.20…

前缀和、差分

0x03前缀和、差分 文章目录 0x03前缀和、差分一维前缀和二维前缀和差分一维差分二维差分 习题T1T2T3 一维前缀和 数组前n项和 s [ k ] ∑ i 1 k a [ i ] s[k]\sum_{i1}^ka[i] s[k]∑i1k​a[i] s[i]s[i-1]a[i];二维前缀和 设s[i][j]表示以(1&#xff0c;1)为顶点&#xff0…

STM32——串口实践

STM32——串口实践 1.蓝牙控制点灯 项目需求 通过蓝牙模块&#xff0c;实现手机控制蓝牙插座/风扇/灯。 本质&#xff1a; 采用蓝牙的透传功能&#xff1b; 控制 IO 口的输出。 硬件清单 HC01蓝牙模块 CH340 杜邦线 项目设计 HC01_TX – RX1 HC01_RX – TX1 项目…

SouthLeetCode-打卡24年01月第2周

SouthLeetCode-打卡24年01月第2周 // Date : 2024/01/08 ~ 2024/01/14 001.数组中第三大的数 (1) 题目描述 001#2023机试T1#北岸计划2024/01/08 给定一个nums[]数组&#xff0c;求出数组中第三大的数&#xff0c;注意数组中可能包含重复的元素&#xff0c;保证一定有第三大…

【Python实战】Python多线程批量采集图片

前言 本文来介绍如何多线程采集图片&#xff0c;多线程效率更快&#xff0c;但是&#xff0c;我们单一IP请求过于频繁&#xff0c;可能会被反爬&#xff0c;被封IP&#xff0c;所以&#xff0c;我们就要用到IP代理池&#xff0c;这里&#xff0c;我给大家推荐一个&#xff0c;可…