作用和特点:
使用场景:
作用和特点:
使用场景:
阻塞队列存储:
延迟队列存储:
写入队列:
@Override
public voidawardStockConsumeSendQueue(StrategyAwardStockKeyVO strategyAwardStockKeyVO) {
// 写入队列操作,奖品库存消耗的队列
String cacheKey = Constants.RedisKey.STRATEGY_AWARD_COUNT_QUERY_KEY;
// 创建队列信息
// 通过 redisService 获取一个阻塞队列
RBlockingQueue<StrategyAwardStockKeyVO> blockingQueue = redisService.getBlockingQueue(cacheKey);
// 用阻塞队列 blockingQueue 创建一个延迟队列 delayedQueue
// 将队列信息加入到延迟队列中,希望固定一个时间段写入队列,但是不要写的这么快,消费完了写的时候慢一些,让下游处理有一个反应时间
RDelayedQueue<StrategyAwardStockKeyVO> delayedQueue = redisService.getDelayedQueue(blockingQueue);
// 这里3秒之后再加入到队列中去
// 将 strategyAwardStockKeyVO 加入到延迟队列中,设置延迟时间为 3 秒
delayedQueue.offer(strategyAwardStockKeyVO, 3, TimeUnit.SECONDS);
}
从队列中取:
@Override
public StrategyAwardStockKeyVO takeQueueValue() {
String cacheKey = Constants.RedisKey.STRATEGY_AWARD_COUNT_QUERY_KEY;
// 通过 cacheKey 获取一个阻塞队列。
RBlockingQueue<StrategyAwardStockKeyVO> destinationQueue = redisService.getBlockingQueue(cacheKey);
// 这里不用take,take需要一直等待。已经有定时任务了,直接弹出即可
// 从阻塞队列中取出一个元素,如果队列为空,返回 null
return destinationQueue.poll();
}