Redis过期事件通知实现订单自动关闭

业务系统设计中,常有订单自动关闭的功能,下单后指定时间内没有支付则自动关闭订单。这里介绍一种利用redis键失效通知实现订单自动关闭的方法

redis键失效策略原理

blog.csdn.net/zhu_tianwei/article/details/80169900

实现步骤

  1. 在创建订单时,用订单Id+前缀组成key,存储到redis中,并设置过期时间
public void setEx(String key, String value, long timeout, TimeUnit unit) {
      this.stringRedisTemplate.opsForValue().set(key, value, timeout, unit);
}
  1. 在应用中新建listener继承KeyExpirationEventMessageListener,并且重写onMessage方法
@Override
public void onMessage(Message message, byte[] pattern) {}

其中message即为失效key的名称,去掉前缀后取出订单Id,做关闭订单处理

需要注意的一点是,在多个应用部署的情况下,每个客户端都会收到channel发布的失效事件,所以需要在业务处理时使用锁锁住该订单

public boolean tryLock(String key, String value, int expireTime) throws Exception {    
return this.stringRedisTemplate.opsForValue().setIfAbsent(key, value, (long)expireTime, TimeUnit.MILLISECONDS);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容