java:redis过期监听实现订单自动取消

为了处理第三方支付接口延迟导致的支付问题,本文介绍了如何使用Java和Spring结合Redis实现订单的自动取消。通过开启Redis监听,设置订单失效时间,并监听Redis消息,在订单过期时自动触发业务逻辑,实现订单状态的正确更新。
摘要由CSDN通过智能技术生成

接手一个商城项目,因第三方支付接口返回结果偶尔有延迟,造成用户重复支付,支付后显示未支付,支付后编辑丢失订单等情况,所以需要对成功支付的订单进行锁定,5分钟后判断是否支付成功,实现如下:
1.开启redis监听(该功能需 Redis 版本大于 2.8)
修改redis.conf中的notify-keyspace-events 为Ex
(这一步开启redis监听,但是我没有改也生效了,可能是之前人员部署的时候已经开启了)
notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:

字符 发送的通知
K 键空间通知,所有通知以__keyspace@__ 为前缀
E 键事件通知,所有通知以 keyevent@ 为前缀
g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$ 字符串命令的通知
I 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 过期事件,每当有过期键被删除时发送
e 驱逐事件,每当有键因为maxmemory政策而被删除时发送
A 参数 g$lshzxe 的别名

输入的参数中至少要有一个K或者E,否则其余参数不会有任何的通知生效。
如果想订阅所有的通知,直接设置为AKE。

2.将RedisMessageListenerContainer注册成为spring的bean(MessageListener也是可以的)

package com.rayeye.insurance.commons.redis;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


/**
 * redis配置类
 * @author gitonline
 *
 */

@Configuration
public class RedisConfiguration {
   
    /**
     * springboot2.x 使用LettuceConnectionFactory 代替 RedisConnectionFactory
     * application.yml配置基本信息后,springboot2.x  RedisAutoConfiguration能够自动装配
     * LettuceConnectionFactory 和 RedisConnectionFactory 及其 RedisTemplate
     *
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
   
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setKeySerializer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值