zoukankan      html  css  js  c++  java
  • SpringBoot + Redis 实现订单30分钟不支付自动取消

    修改redis的redis.conf文件

    找到 notify-keyspace-events Ex 这一行 取消行前边的注释 开启键空间失效通知

    在SpringBoot项目的pom.xml中导入依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

    在项目中新建Listener 并继承自 KeyExpirationEventMessageListener

    @Component
    @Slf4j
    public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    
        @Autowired
        private OrderService orderService;
    
        public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
            super(listenerContainer);
        }
    
        @Override
        public void onMessage(Message message, byte[] pattern) {
            // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
            String expiredKey = message.toString();
            log.info("------------------redis key 失效; key = " + expiredKey);
            if (expiredKey.startsWith(GlobalConstant.RedisPrefixKey.ORDER_PREFIX)) {
                // 获取订单orderNO
                String orderNo = expiredKey.substring(expiredKey.lastIndexOf(":")+1);
                // 将待支付的订单改为已取消(超时未支付)
                orderService.orderPaidTimeout(orderNo);
            }
        }
    }

    新建配置类

    @Configuration
    public class RedisListenerConfig {
    
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            return container;
        }
    
    }

    在生成订单的时候要将orderNo作为key放入redis,设置失效时长为30分钟

    在订单支付成功或者取消订单后删除redis中的key,不然会出现支付成功或者取消订单后还是超时未支付的情况

  • 相关阅读:
    09 python初学 (字符串)
    08 python 初学(字典)
    07 Python初学(元组)
    ubuntu 学习
    10 python 初学(Python 的编码解码)
    12 python 初学(深浅拷贝、集合)
    11 python初学 (文件)
    ubuntu 在 Windows 下的安装
    mysql常用命令总结
    关于Windows 7 下临时IPV6地址的问题,如何禁用它
  • 原文地址:https://www.cnblogs.com/yangwanhao/p/12638410.html
Copyright © 2011-2022 走看看