Redis中的自动过期机制怎么使用
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本篇内容介绍了"Redis中的自动过期机制怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Re
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
中学生网络安全报告
无锡中高端服务器市面价
中国大型网络软件开发公司
软件开发it人员工资
最新网络安全工作自查报告
奥蒂斯电梯服务器怎么清故障
增量模型软件开发过程
双十一淘宝服务器状态
电流工控软件开发
c 创建数据库表
万方数据库备份流程
惠普服务器开机转一下
人大金仓数据库操作系统
邮件服务器 发送端口
网络安全与分享经济
狂野飙车9选哪个服务器
华为服务器做raid
想考网络安全研究生需要哪些
数据库运行过程中用什么
cache数据库备份技巧
热血三国管理服务器
中科大邮箱服务器设置
软件开发人员配备情况说明
数据库管理师基础课程
混沌与秩序2安卓服务器
管理软件开发认可 云趣科技
数据库时间戳获取
测速本地服务器 慢
数据库 网络性能
免费的查询类数据库