电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

spring boot+redis 監聽過期Key的操作方法

瀏覽:64日期:2023-08-21 14:06:02

前言:

在訂單業務中,有時候需要對訂單設置有效期,有效期到了后如果還未支付,就需要修改訂單狀態。對于這種業務的實現,有多種不同的辦法,比如:

1、使用querytz,每次生成一個訂單,就創建一個定時任務,到期后執行業務代碼;

2、rabbitMq中的延遲隊列;

3、對Redis的Key進行監控;

1、引入依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

2、修改boot的redis配置

spring: #redis redis: database: 0 host: 127.0.0.1 password: redis_123456 port: 6379

3、在服務器中 修改redis.conf配置文件(原來notify-keyspace-events 屬性是' ' 空的,我們只需要填上“Ex”就行了)

notify-keyspace-events 'Ex'

4、創建一個Redis監控類,用于監控過期的key,該類需繼承KeyExpirationEventMessageListener

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 java.nio.charset.StandardCharsets; /** * @program: SpringCloud * @description: redis Key過期監聽 * @author: zhang yi * @create: 2020-03-24 14:14 */public class KeyExpiredListener extends KeyExpirationEventMessageListener { public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { System.out.println('過期key:' + message.toString()); }}

5、創建Redis配置類

import com.zy.rabbitmq.base.Listener.KeyExpiredListener;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.RedisConnectionFactory;import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @program: SpringCloud * @description: redis配置類 * @author: zhang yi * @create: 2020-03-24 14:17 */@Configurationpublic class RedisConfiguration { @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()); } }

6、這里提供一個redis工具類,用于存儲值,獲取值,獲取過期時間等操作。

import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils; import javax.annotation.Resource;import java.util.concurrent.TimeUnit;/** * redis 工具類 * @Author ZhangYi */@Componentpublic class RedisUtil { @Resourceprivate RedisTemplate<String, Object> redisTemplate; /** * 指定緩存失效時間 * * @param key 鍵 * @param time 時間(秒) * @return */public boolean expire(String key, long time) {try {if (time > 0) {redisTemplate.expire(key, time, TimeUnit.SECONDS);}return true;} catch (Exception e) {e.printStackTrace();return false;}} /** * 根據key 獲取過期時間 * * @param key 鍵 不能為null * @return 時間(秒) 返回0代表為永久有效 */public long getExpire(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);} /** * 判斷key是否存在 * * @param key 鍵 * @return true 存在 false不存在 */public boolean hasKey(String key) {try {return redisTemplate.hasKey(key);} catch (Exception e) {e.printStackTrace();return false;}} /** * 刪除緩存 * * @param key 可以傳一個值 或多個 */@SuppressWarnings('unchecked')public void del(String... key) {if (key != null && key.length > 0) {if (key.length == 1) {redisTemplate.delete(key[0]);} else {redisTemplate.delete(CollectionUtils.arrayToList(key));}}} // ============================String=============================/** * 普通緩存獲取 * * @param key 鍵 * @return 值 */public Object get(String key) {return key == null ? null : redisTemplate.opsForValue().get(key);} /** * 普通緩存放入 * * @param key 鍵 * @param value 值 * @return true成功 false失敗 */public boolean set(String key, Object value) {try {redisTemplate.opsForValue().set(key, value);return true;} catch (Exception e) {e.printStackTrace();return false;} } /** * 普通緩存放入并設置時間 * * @param key 鍵 * @param value 值 * @param time 時間(秒) time要大于0 如果time小于等于0 將設置無限期 * @return true成功 false 失敗 */public boolean set(String key, Object value, long time) {try {if (time > 0) {redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);} else {set(key, value);}return true;} catch (Exception e) {e.printStackTrace();return false;}}}

7、測試。(這里開放兩個接口,一個set值,并設置過期時間為10秒,一個獲取值和過期時間,當到達過期時間,看是否回去到過期Key)

@GetMapping('/put') public String demo(){ redisUtil.set('name','zhangyi',10); return 'aaa'; } @GetMapping('/get') public Map<String,Object> get(){ Map<String,Object> m =new HashMap<>(); m.put('time',redisUtil.getExpire('name')); m.put('val',redisUtil.get('name')); return m; }

spring boot+redis 監聽過期Key的操作方法

spring boot+redis 監聽過期Key的操作方法

成功獲取到了過期Key,這里亂碼是因為boot集成的Redis存key或者value的時候,沒有配置字符串序列化。沒有配置的話是默認使用jdk本身的序列化的。

到此這篇關于spring boot+redis 監聽過期Key的文章就介紹到這了,更多相關spring boot+redis 監聽過期Key內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 智能终端_RTU_dcm_北斗星空自动化科技 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 盘古网络技术有限公司| 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁| 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 西门子代理商_西门子变频器总代理-翰粤百科 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 |