自动成团功能总结

自动成团功能总结

解决方案

1.使用Redis key过期事件实现过期自动成团

2.使用Quartz定时任务

方案一.使用Redis key过期事件实现过期自动成团

使用Spring Boot整合spring-data-redis整合实现

实现思路

  • 修改配置:将键事件通知打开,notify-keyspace-events Ex
  • 配置事件监听容器
  • 编写监听事件的监听器
  • 客户端设置key有效期时,key的格式为GROUP_BUY:XXX

代码实现

pom.xml引入依赖



    redis.clients
    jedis
    2.8.1


    org.springframework.data
    spring-data-redis
    1.7.2.RELEASE

配置类

/**
 * 配置Redis监听容器
 * @author zqr
 * @date 2019-07-15
 */
@Configuration
public class RedisConfig{
    
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

key过期监听器

/**
 * 自动拼团redis key过期通知
 *
 * @author zqr
 * @date 2019/7/11 20:28
 */
@Component
public class AutoGroupBuyRedisKeyExpireListener extends KeyExpirationEventMessageListener {

    /**
     * 默认构造方法,将监听器注入容器
     *
     * @param redisMessageListenerContainer 容器
     */
    public AutoGroupBuyRedisKeyExpireListener(RedisMessageListenerContainer redisMessageListenerContainer) {
        super(redisMessageListenerContainer);
    }

    /**
     * 针对redis数据失效事件,进行数据处理
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println("-----------------------------------------------------------------------");
        System.out.println(message.toString());
    }
}

方案二.使用Quartz实现自动成团功能

实现思路

  • 下单成功后,生成一个30分钟后运行的任务,30分钟可以配置
  • 30分钟后检查订单状态,如果未支付,则进行处理

你可能感兴趣的:(自动成团功能总结)