自动成团功能总结
解决方案
1.使用Redis key过期事件实现过期自动成团
2.使用Quartz定时任务
方案一.使用Redis key过期事件实现过期自动成团
使用Spring Boot整合spring-data-redis整合实现
实现思路
- 修改配置:将键事件通知打开,
notify-keyspace-events Ex
- 配置事件监听容器
- 编写监听事件的监听器
- 客户端设置key有效期时,key的格式为
GROUP_BUY:XXX
代码实现
pom.xml引入依赖
<!--redis相关依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
配置类
/**
* 配置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分钟后检查订单状态,如果未支付,则进行处理
网友评论