redis实现延迟任务

实现思路:

发布时间:立即发布、未来要发布

list存立即发布,redis中的list是双向链表,方便添加查找性能较高。

zset可以去重、排序,存储未来要发布的。

 为什么要把任务存储到数据库中?

延迟任务是一个通用的服务,任何有延迟需求的任务都可以调用该服务,内存数据库的存储是有限的,需要考虑数据持久化的问题,存储数据库中是一种数据安全的考虑。

 

为什么使用redis中的两种数据类型,list和zset?

原因一:list存储立即执行的任务,zset存储未来的数据

原因二:任务量过大以后,zset的性能会下降

 

时间复杂度:执行时间(次数)随着数据规模增长的变化趋势

操作redis中的list命令LPUSH:时间复杂度: O(1),常量级复杂度,执行次数与数据规模无关

操作redis中的zset命令zadd:时间复杂度:O(M*log(n)),对数级复杂度,执行次数与数据规模是对数关系

 

在添加zset数据的时候,为什么需要预加载?

如果任务数据特别大,为了防止阻塞,只需要把未来几分钟要执行的数据存入缓存即可,是一种优化的形式

 

posted @ 2023-07-04 14:56  佛系粥米  阅读(67)  评论(0编辑  收藏  举报