首页 > 数据库 >redis实现延迟任务

redis实现延迟任务

时间:2023-07-04 15:00:16浏览次数:47  
标签:存储 zset redis 复杂度 list 任务 延迟

实现思路:

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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

 

标签:存储,zset,redis,复杂度,list,任务,延迟
From: https://www.cnblogs.com/fxzm/p/17525782.html

相关文章

  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的单任务task的多CPU运行模
    超算是离我们平时生活比较远的一个事情,即使是对于一个计算机专业方向的学生来说,正好实验室得到了华为的超算平台的使用账号,于是就摸索了一下,不得不承认这个东西确实不是普通人能搞的明白的。 基本概念:一个工作Job可以开多个副本,每个副本都是mpirun-N所开出的,每个副本又被叫......
  • Redis实现短信登录设计
    项目搭建前期准备导入SQLCREATETABLE`tb_user`(`id`bigintunsignedNOTNULLAUTO_INCREMENTCOMMENT'主键',`phone`varchar(11)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'手机号码',`password`varchar(128)CHARACTERS......
  • springboot封装redission的分布式锁逻辑为注解
    场景概述使用分布式锁的时候,每次都需要使用trycatch处理方法中的逻辑。考虑是否可以这块逻辑抽离出来。实现在自定义的注解中添加属性来设置锁的等待时间、租赁时间和时间单位importjava.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTI......
  • 【HZERO】定时任务
    ......
  • 多任务异步协程实现
    1.未实现异步操作代码: 2.实现异步操作代码: ......
  • Redis九种数据结构
    深度剖析Redis九种数据结构实现原理,建议收藏 1.Redis介绍Redis是一个高性能的键值存储系统,支持多种数据结构。包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。每种数据结构......
  • 2023-07-03:讲一讲Redis缓存的数据一致性问题和处理方案。
    2023-07-03:讲一讲Redis缓存的数据一致性问题和处理方案。答案2023-07-03:数据一致性当使用缓存时,无论是在本地内存中缓存还是使用Redis等外部缓存系统,会引入数据同步的问题。下面以Tomcat向MySQL中进行数据的插入、更新和删除操作为例,来说明具体的过程。分析下面几种解......
  • redis集群故障无法自动提升slave
    问题描述生产redis集群(3master/3slave)部署在3台虚机上,每个虚机部署2个redis节点,挂了一台虚机导致redis集群异常,分析发现是挂了机器上是2masterredisredis日志*MASTER<->REPLICAsyncstarted#ErrorconditiononsocketforSYNC:Connectionrefused*Connectingto......
  • 【JS错误总结】promise.then 如果没有被 resolve,不会立即执行,而是先执行宏任务,等待 pr
    setTimeout(()=>{console.log('setTimeout')},0)letpromise=newPromise((resolve,reject)=>{console.log('1')setTimeout(()=>{console.log('timeStart')resolve('success�......
  • 解决方案 | win10任务栏假死,桌面鼠标可以动但是无法点击任务栏图标
    1背景今天电脑不知道什么原因,鼠标出现了无法点击任务栏图标的情况,但是桌面上可以晃动。 2解决过程(方法1-3对我无效,但是不代表对你们无效,)方法1:重启资源管理器。方法2:电脑重启、或者关机重启。方法3:win+i,设置-电源和睡眠--从不 除此之外,我还进行了系统还原、文件转移(......