使用场景
1.20分钟后取消订单
2小时后自动计算分数
3.红包1天后自动归还
解决方案:
为了持久化的所以肯定不能采用Java 的延迟队列,那页不能放入DB进行轮训,这样的话访问量比较大。
这里我使用Redis SortedSet实现延迟队列。
实现步骤:
1.开启线程去添加处理信息,value设置处理信息,score设置处理时间
2.开启线程去轮询处理消息是否需要处理,需要注意原子性。
代码示例:
maven依赖
redis.clients
jedis
3.3.0
com.alibaba
fastjson
1.2.70
jedis线程池public class RedisPool{
JedisPool jedisPool;
RedisPool(){
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxIdle(20);//最大闲置个数
config.setMinIdle(10);//最小闲置个数
config.setMaxWaitMillis(10);//最大等待时间
config.setMaxTotal(50);//最大连接数
jedisPool=new JedisPool(config,"localhost",6379);
}
Jedis getJedis(){
return jedisPool.getResource();