解决方案-延时队列
参考文献
一口气说出 6种 延时队列的实现方法,面试官也得服
延时队列常用实现详解
你真的知道怎么实现一个延迟队列吗 ?
Redisson源码(二)延迟队列RDelayedQueue的使用及原理分析
延时队列的定义
首先队列是一种先进先出(FIFO)的数据结构.普通队列中的元素是有序的,先进入队列的元素会被优先取出进行消费.延时队列相对普通队列最大的区别是在于其"延时"的特性上.
普通队列的元素是先进先出,是按照队列入队的顺序进行处理;延时队列中的元素会指定一个延时时间,表示其希望在经过指定时间后再进行处理.
延时队列的使用场景
新建的订单,如果用户在 15 分钟内未支付,则自动取消.
公司的会议预定系统,在会议预定成功后,会在会议开始前半小时通知所有预定该会议的用户.
安全工单超过 24 小时未处理,则自动拉企业微信群提醒相关责任人.
用户下单外卖以后,距离超时时间还有 10 分钟时提醒外卖小哥即将超时.
延时队列的具体实现方案
Java DelayQueue
DelayQueue是无界的延时阻塞队列,内部是使用优先级队列PriorityQueue ...
解决方案-文件上传
参考文献
大文件上传:秒传、断点续传、分片上传
前端控件
WebUploader
秒传
即通过计算文件的MD5,若文件MD5相同则不需要上传,从而实现"秒传"操作.
秒传核心逻辑
利用Redis的set方法存放文件上传状态,其中key为文件上传的md5,value为是否上传完成的标志位,
当标志位true为上传已经完成,此时如果有相同文件上传,则进入秒传逻辑.如果标志位为false,则说明还没上传完成,此时需要在调用set的方法,保存块号文件记录的路径,其中key为上传文件md5加一个固定前缀,value为块号文件记录路径
12345678910111213141516171819202122232425262728293031@Slf4j@RestController@RequestMapping("/upload")public class UploadController { private static final Map<String, String> CACHE = new HashMap< ...