首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis系列之延时队列简介

文章目录 一、业务场景 1.1 实践场景 1.2 实现方式 二、Redis延时队列 2.1 Redis列表实现 2.2 Redis集合实现 一、业务场景 所谓延时队列就是延时的消息队列,下面说一下一些业务场景比较好理解...来实现,本博客主要介绍一下Redis实现延时队列 二、Redis延时队列 2.1 Redis列表实现 Redis实现延时队列可以通过其数据结构列表(list)来实现,顺便复习一下Redis的列表,实现列表...这里可以使用Rediszrem命令来实现 Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。 当 key 存在但不是有序集类型时,返回一个错误。...注意: 在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素。...下面给出来自《Redis 深度历险:核心原理与应用实践》小册的例子:例子就是用有序集合和zrem来实现的 import java.lang.reflect.Type; import java.util.Set

76650
您找到你想要的搜索结果了吗?
是的
没有找到

Redis学习笔记之延时队列

来实现,本博客主要介绍一下Redis实现延时队列 二、Redis延时队列 2.1 Redis列表实现 Redis实现延时队列可以通过其数据结构列表(list)来实现,顺便复习一下Redis的列表,实现列表...消息的延迟几乎为零 2.2 Redis集合实现 Redis的有序集合(zset)也可以用于实现延时队列,消息作为value,时间作为score,这里顺便复习一下Redis的有序集合 //9.0是score...这里可以使用Rediszrem命令来实现 Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。 当 key 存在但不是有序集类型时,返回一个错误。...注意: 在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素。...下面给出来自《Redis 深度历险:核心原理与应用实践》小册的例子:例子就是用有序集合和zrem来实现的 import java.lang.reflect.Type; import java.util.Set

2.2K30

ASP.NET Core微服务(六)——【redis命令详细列表3】

ASP.NET Core微服务(六)——【redis命令详细列表3】 ---- 目录 ASP.NET Core微服务(六)——【redis命令详细列表3】 基础环境 对象hash 添加hash-获取...有序集合zset zset添加:zadd 根据指定集合获取指定区间的元素:zrange 根据指定分数区间获取元素:zrangebyscore 删除指定集合中一个或多个指定元素:zrem 获取集合中元素的个数...删除指定集合中一个或多个指定元素:zrem zrem key member1 member2 这里说的是member成员,我们删除a4试试 zrem myzset a4 zrange myzset...Redis的事务 redis的事物操作与数据库的是一样的功能,我们尝试一下。...我们基础的Redis就讲到这里,大家需要勤加练习才能掌握各种命令哦。

44210

Redis 延迟队列实现(基于PHP)

Redis实现延迟队列 Redis 可以利用 zset (有序列表)来实现,将消息序列化成一个字符串作为 zset的 value; 这个消息的到期处理时间作为 score,利用多个线程轮询 zset 获取到期的任务进行处理.../提取消息数据 $message = key($message_data); //从延迟队列中删除刚获取的消息 $success = $client->zrem...('delay:', $message); //多线程或多进程争抢消息时, //根据zrem返回值判断,当前实例有没有抢到任务 //抢到任务,做业务处理后返回...local messages = {} local queue_value = {} local insert = table.insert -- 获取最近n条消息并删除消息 queue_value = redis.call...ZRANGEBYSCORE",queue,min,max,"LIMIT",offset,count) for idx, message in pairs(queue_value) do if redis.call

36520

Redis基础教程(九):redis有序集合

示例:ZREMRANGEBYSCORE leaderboard 100 200 ZREM key member [member …] 描述:移除有序集合中的一个或多个成员。...示例:ZREM leaderboard player1 ZSCORE key member 描述:返回有序集合中成员的分数。...步骤1:初始化排行榜 redis-cli DEL leaderboard 步骤2:添加玩家到排行榜 redis-cli ZADD leaderboard 1000 player1 redis-cli ZADD...步骤1:初始化任务队列 redis-cli DEL task_queue 步骤2:添加任务到队列 redis-cli ZADD task_queue 5 task1 redis-cli ZADD task_queue...步骤4:移除已完成的任务 redis-cli ZREM task_queue task1 总结 Redis 的有序集合因其独特的排序和唯一性功能,在排行榜、任务队列、时间序列数据存储等多种场景中展现了其强大的应用价值

9110

013:Redis延时队列

有了 Redis,它就可以让我们解脱出来,对于那些只有一组消费者的消息队列,使用 Redis就可以非常轻松的搞定。...num=1) if not values: time.sleep(1) # 延时队列空的,休息 1s continue value = values[0] # 拿第一条,也只有一条 success = redis.zrem...的 zrem 方法是多线程多进程争抢任务的关键,它的返回值决定了当前实例有没有抢到任务,因为 loop 方法可能会被多个线程、多个进程调用,同一个任务可能会被多个进程线程抢到,通过 zrem来决定唯一的属主...进一步优化 上面的算法中同一个任务可能会被多个进程取到之后再使用 zrem 进行争抢,那些没抢到 的进程都是白取了一次任务,这是浪费。...可以考虑使用 lua scripting 来优化一下这个逻辑,将zrangebyscore 和 zrem 一同挪到服务器端进行原子化操作,这样多个进程之间争抢任务时就不会出现这种浪费了。

2.2K30

Redis 延迟队列实现(基于PHP)

Redis实现延迟队列 Redis 可以利用 zset (有序列表)来实现,将消息序列化成一个字符串作为 zset的 value; 这个消息的到期处理时间作为 score,利用多个线程轮询 zset 获取到期的任务进行处理.../提取消息数据 $message = key($message_data); //从延迟队列中删除刚获取的消息 $success = $client->zrem...('delay:', $message); //多线程或多进程争抢消息时, //根据zrem返回值判断,当前实例有没有抢到任务 //抢到任务,做业务处理后返回...local messages = {} local queue_value = {} local insert = table.insert -- 获取最近n条消息并删除消息 queue_value = redis.call...ZRANGEBYSCORE",queue,min,max,"LIMIT",offset,count) for idx, message in pairs(queue_value) do if redis.call

86340
领券