当前位置: 首页 > wzjs >正文

网页设计模板网站推荐济南网站推广徽hyhyk1

网页设计模板网站推荐,济南网站推广徽hyhyk1,上海网页制作机构,做网站的英文编辑利用redis实现订单倒计结束后更改订单状态为已失效 利用Redis实现订单倒计时并自动失效订单的功能,可以通过Redis的过期键通知(Key Expiration Notification)和定时任务补偿机制实现 实现步骤 配置Redis启用过期事件 修改Redis配置文件 redi…

利用redis实现订单倒计结束后更改订单状态为已失效
利用Redis实现订单倒计时并自动失效订单的功能,可以通过Redis的过期键通知(Key Expiration Notification)和定时任务补偿机制实现
实现步骤

  1. 配置Redis启用过期事件
    修改Redis配置文件 redis.conf,开启键过期事件通知:

启用过期事件通知

notify-keyspace-events Ex

并且启用Redis的持久化
save 900 1
save 300 10
save 60 10000

重启Redis服务使配置生效。

  1. Java监听Redis过期事件
    使用Spring Data Redis或Jedis监听键过期事件。
    示例代码(Spring Data Redis):
package com.transport.framework.config;import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;/*** redis配置* * @author transport*/
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory,OrderExpirationListener orderExpirationListener) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);// 订阅所有数据库的过期事件(0表示数据库编号)container.addMessageListener(orderExpirationListener, new PatternTopic("__keyevent@0__:expired"));return container;}
}自定义监听器处理订单过期:
package com.transport.framework.config;import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;@Component
public class OrderExpirationListener implements MessageListener {@Overridepublic void onMessage(Message message, byte[] pattern) {String expiredKey = message.toString();// 解析订单ID(假设key格式为order:订单ID)if (expiredKey.startsWith("order:")) {String orderNo = expiredKey.split(":")[1];// 调用订单服务更新订单状态为失效System.out.println("已失效的订单编号为:"+orderNo);}}
}
订单服务更新状态:
代码省略(注意:只有未支付的订单才更新状态)
3. 订单创建时设置Redis过期键
在订单创建时,向Redis插入键并设置过期时间(例如30分钟倒计时):
// 设置Redis过期键:order:订单ID,30分钟后过期
String redisKey = "order:" + order.getId();
redisTemplate.opsForValue().set(redisKey, "1", Duration.ofMinutes(30));
4. 兜底方案:定时任务补偿
为防止Redis事件丢失,增加定时任务扫描数据库中未过期的订单:
@Scheduled(cron = "0 */5 * * * ?") // 每5分钟执行一次
public void checkExpiredOrders() {// 查询数据库中状态为“待支付”且创建时间超过30分钟的订单List<Order> expiredOrders = orderRepository.findExpiredOrders(OrderStatus.PENDING, LocalDateTime.now().minusMinutes(30));for (Order order : expiredOrders) {markOrderAsExpired(order.getId());// 可选:删除Redis中的键(避免重复处理)redisTemplate.delete("order:" + order.getId());}
}
http://www.dtcms.com/wzjs/553294.html

相关文章:

  • 做封面的网站在哪里注册公司流程和费用需要哪些条件
  • 20个优秀的响应式设计html5网站模板软文广告属于什么营销
  • 江门城乡建设局官方网站站群系统软件
  • 采集微信公众号 做网站重庆潼南网站建设价格
  • 全国最新网站备案查询北京搜索引擎推广服务
  • 凡客建站快车做造价在那个网站比较好
  • 靖江做网站哪家好四川广汉市规划和建设局网站
  • dw做网站有哪些用处传统营销渠道有哪些
  • 北京网站排名方案企业网站 php
  • 东莞网站推广定制公司东莞网站建设17
  • 江西网站建设企业邮箱号怎么注册
  • 旅游网站建设经费预算做策划 都上什么网站
  • 网站jquery在线优化p2p万能搜索种子
  • 太原关键词排名优化深圳免费网站排名优化
  • 房地产电子商务的网站建设宾馆网站制作
  • 网站建设管理维护责任书格式无忧网站源码
  • 建设推广网站建网站建设网站
  • 微信电影网站怎么做的网络公司营业范围
  • 电子商务 网站模板做cps的网络文学网站
  • 同城同镇网站建设wordpress 回复某个人
  • 买机票便宜的网站建设做个简单网站大概多少钱
  • 网页设计免费网站推荐微软做网站
  • wordpress菜单背景半透明南京seo外包
  • 广州做网站商城的公司虚拟机做网站服务
  • 高清网站推广免费下载学院宣传网站建设简介
  • 北京市住房与城乡建设厅网站刷单网站开发
  • 莲湖微网站建设天空台108网站找手工活带回家做
  • 医疗产品网站建设wordpress产品定制插件
  • 公司网站邮箱怎么看接收服务器类型关于手机网站设计的若干想法
  • php网站开发实训报告书建设简易电子商务网站流程