怎么用redis实现延迟通知功能
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"怎么用redis实现延迟通知功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Red
千家信息网最后更新 2025年01月19日怎么用redis实现延迟通知功能
本篇内容介绍了"怎么用redis实现延迟通知功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Redis 过期监听场景
业务中有类似等待一定时间之后执行某种行为的需求 , 比如 30 分钟之后关闭订单 . 网上有很多使用 Redis 过期监听的 Demo
redis配置
把notify-keyspace-events Ex 这一行的注释打开
项目demo工程
项目结构如下图
maven依赖
kim-redis com.kim 1.0.0 4.0.0 kim-redis-expiration-notice org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-redis org.projectlombok lombok org.apache.commons commons-pool2
配置文件
server: port: 20103spring: redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: 123456 lettuce: pool: #最大连接数 max-active: 8 #最大阻塞等待时间(负数表示没限制) max-wait: -1 #最大空闲 max-idle: 8 #最小空闲 min-idle: 0 #连接超时时间 timeout: 10000
启动类
/** * @Project: kim-redis * @PackageName: com.kim.redis.expiration.notice * @FileName: NoticeApplication.java * @Description: The NoticeApplication is... * @Author: kimwu * @Time: 2020-12-19 14:01:56 */@SpringBootApplicationpublic class NoticeApplication { public static void main(String[] args) { SpringApplication.run(NoticeApplication.class, args); }}
配置类
@Configurationpublic class RedisTimeoutConfiguration { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisMessageListenerContainer redisMessageListenerContainer() { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); return redisMessageListenerContainer; } @Bean public KeyExpiredListener keyExpiredListener() { return new KeyExpiredListener(this.redisMessageListenerContainer()); }}
监听类
@Slf4jpublic class KeyExpiredListener extends KeyExpirationEventMessageListener { public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String channel = new String(message.getChannel(), StandardCharsets.UTF_8); //过期的key String key = new String(message.getBody(), StandardCharsets.UTF_8); log.info("redis key 过期:pattern={},channel={},key={}", new String(pattern), channel, key); }}
异常情况测试
当key过期时,项目宕机了
①写入redis的key
②手动关停服务,等待redis的key过期
③确认redis的key过期后,重启服务。服务不会收到通知
当key过期时,redis服务宕机了
①写入redis的key
②关停redis服务,等待redis的key过期
③启动redis服务,发现redis的过期key已经不存在了,服务没有收到通知
结论
redis的键过期本身不可靠,并不像rabbitmq一样保证了可靠性。
当服务本身宕机或者redis宕机时,将无法保证过期的key能够被消费。
当使用场景对数据完整性不那么精确时,可以使用redis的键过期策略。否则不太建议使用redis的键过期策略。
"怎么用redis实现延迟通知功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
服务
最大
时间
项目
监听
配置
功能
延迟
内容
场景
情况
数据
更多
知识
空闲
策略
保证
实用
最小
精确
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
腾讯网络安全学院落地东西湖
报考网络技术工作要点
让数据库字段换行
河南晟谦网络技术有限公司
激光切割控制软件开发
数据库中旅客和机票的关系是
360家庭网络安全
网络安全通信协议教师用书
网络安全月活动宣传方案
怎么玩体验服务器
软件开发技术分析句子成分
清远网络安全馆
家用wifi无线网络技术
河北军工数显钟服务器
深圳全景软件开发
应用程序和服务器连接
武汉联影软件开发工程师
哪个软件开发信誉好
方舟海贼服务器qq群
seer数据库培训
串口与网口通信软件开发
国内网络安全企业现状
广州哲彦互联网科技有限公司
江苏职校网络技术
接受软件和数据库连接
软件开发技术分析句子成分
服务器数据库可以放到外面吗
简单计算机网络技术视频
sa用户不能附加数据库
日本软件开发详细设计