Redis中的自动过期机制怎么使用
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇内容介绍了"Redis中的自动过期机制怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Re
千家信息网最后更新 2025年02月23日Redis中的自动过期机制怎么使用
本篇内容介绍了"Redis中的自动过期机制怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Redis中的自动过期机制
实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态
1.使用Redis Key自动过期出发事件通知
2.使用定时任务30分钟后检查
3.按照每分钟轮训检查
CREATE TABLE `order_number` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_name` varchar(255) DEFAULT NULL, `order_status` int(11) DEFAULT NULL, `order_token` varchar(255) DEFAULT NULL, `order_id` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
一、使用Redis Key自动过期机制
当我们的key失效时,可以执行我们的客户端回调监听的方法。
需要在Redis中配置:
1.打开redis.conf配置文件
vi redis.conf
2. 在配置文件中查找notify-keyspace-events
/notify-keyspace-events
3. 修改为notify-keyspace-events Ex
4.重启redis
二、SpringBoot整合key失效监听
@Configurationpublic class RedisListenerConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; }}
@Componentpublic class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Resource private OrderMapper orderMapper; /** * 待支付 */ private static final Integer ORDER_STAYPAY = 0; /** * 失效 */ private static final Integer ORDER_INVALID = 2; /** * 使用该方法监听 当我们的key失效的时候执行该方法 * * @param message * @param pattern */ @Override public void onMessage(Message message, byte[] pattern) { String expiraKey = message.toString(); System.out.println("该key:expiraKey:" + expiraKey + "失效啦~"); // 前缀判断 orderToken OrderEntity orderNumber = orderMapper.getOrderNumber(expiraKey); if (orderNumber == null) { return; } // 获取订单状态 Integer orderStatus = orderNumber.getOrderStatus(); // 如果该订单状态为待支付的情况下,直接将该订单修改为已经超时 if (orderStatus.equals(ORDER_STAYPAY)) { orderMapper.updateOrderStatus(expiraKey, ORDER_INVALID); // 库存加上1 } }}
@RestControllerpublic class MemberController { @Autowired private UserMapper userMapper; /** * * @return */ @RequestMapping("/getListMember") @Cacheable(cacheNames = "member", key = "'getListMember'") public ListgetListMember() { return userMapper.findMemberAll(); }}
@Datapublic class OrderEntity { private Long id; private String orderName; /** * 0 待支付 1 已经支付 */ private Integer orderStatus; private String orderToken; private String orderId; public OrderEntity(Long id, String orderName, String orderId, String orderToken) { this.id = id; this.orderName = orderName; this.orderId = orderId; this.orderToken = orderToken; }}
public interface OrderMapper { @Insert("insert into order_number values (null,#{orderName},0,#{orderToken},#{orderId})") int insertOrder(OrderEntity OrderEntity); @Select("SELECT ID AS ID ,order_name AS ORDERNAME ,order_status AS orderstatus,order_token as ordertoken,order_id as orderid FROM order_number\n" + "where order_token=#{orderToken};") OrderEntity getOrderNumber(String orderToken); @Update("\n" + "\n" + "update order_number set order_status=#{orderStatus} where order_token=#{orderToken};") int updateOrderStatus(String orderToken, Integer orderStatus);}
1.访问addOrder接口
2.查看数据库数据
3. 10s后redis过期,执行回调机制
4.再次查看数据库,状态已被修改
"Redis中的自动过期机制怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
机制
订单
支付
状态
数据
方法
监听
配置
内容
情况
数据库
文件
更多
知识
检查
实用
学有所成
接下来
事件
任务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器安全配置不当很轻易泄密
有软件开发经验转行
组网与网络安全
国产商用服务器cpu
晋源服务器JY222G
民政局数据库登记贫困困境儿童
jmeter测试数据库步骤
虹口区网络技术开发服务报价表
服务器开机黑屏显示在运行
网络安全学校李洋
易语言取数据库所有记录
邮政软件开发待遇怎么样
服务器本地账户管理
上海互联网软件开发费用
软件开发行业专家
c4d数据库损坏
西安竹乐网络技术
网络安全法施行四周年总结
高性价比微型服务器主板
无线传感网络技术指标
多媒体软件开发前景
网页怎么代理服务器
汽车网络技术的发展趋势结论
服务器访问和登录权限管理
数据库删数据
网络安全法49条
腾讯阿里巴巴的根服务器在哪里
东莞卫星软件开发报价表
关系型数据库表结构怎么设计
青浦区共享陪护床软件开发