《redis in action》Redis做队列写点笔记关注共 1005字,需浏览 3分钟 ·2021-05-02 15:58 使用redis做任何事情都是基于redis提供的数据结构,那么消息队列有哪几种类型?之前rabbitmq咋说有简单的队列、优先级队列、延迟队列等等。但是那时候咋也没说栈这东西。那么redis如何做这些事,根据之前的学习。肯定使用list了。Redis队列(先进先出)队列中我们说redis提供了很多操作队列的方法。可以从左边添加、右边添加、左边获取、右边获取等等等。所以说有了这些方法,用redis做个简单的队列简直是太容易了。比如我们要做一个先进先出的队列。那么我们就使用命令RPUSH进行添加,而获取的时候我们就采用命令LPOP,但是list中可能没有数据,这时候使用LPOP就会返回nil,所以我们可以采用BLPOP命令进行阻塞式的数据获取。Redis栈(先进后出)通过上边的说法,咋操作List的时候直接单向操作,那么就是一个栈啊。LPUSH,BLOPO命令即可搞定。Redis优先级队列(按优先级高低进行排序)我们的任务发送到redis中,然后任务要具有一定的顺序,这个顺序是优先级。考虑到之前list中有lpush,rpush等命令,所以对于简单的优先级队列,我们直接采用这两个命令即可。当然现实的问题是我们的优先级消息可能不是确定的,所以兼容性问题很重要。故此我们可以根据建立多个优先级list,然后我们在获取消息的时候用多个优先级list去获取。比如brpop list1 list2,其中list1是优先级高的队列。List2是优先级低的队列。但是这种方式实现优先级队列的问题是扩展性不强。那么最后就是采用ZSET来做了,但是ZSET的容量是8192,所以容量是个大问题,除此之外,zset需要去反查一下真实的消息,所以效率比较低。但是如果做异步处理的话,也还行。Riedis做延迟队列(指定时间执行)Redis做延迟队列其实还是用zset去做,我们用当前的时间+需要延迟的时间作为zset的score,然后我们按照score的增序来获取对应的元素,通过判断时间是否小于当前时间然后执行相关的动作,处理完毕之后将其从ZSET和list中移除即可。 浏览 19点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 电子书-Redis实战 Redis In Action免费分享程序员实战基地0Redis QueuePython 作业队列系统RQ(RedisQueue)是一个简单的Python库,用于实现作业的队列,并在后台进行处理。后端基于Redis,可方便集成到Web应用中,要求Redis>=2.6.0示例代码:from rq Redis QueuePython 作业队列系统RQ (Redis Queue) 是一个简单的 Python 库,用于实现作业的队列,并在后台进行处Redis应用-异步消息队列与延时队列码农编程进阶笔记0基于Redis实现延时队列服务JAVA葵花宝典0Kue基于 Redis 的优先级队列Kue是一款为node.js而构建,由redis支持的优先级队列。更新记录:0.9->0.100.8->0.9运行系统环境要求:Redis>=2.6.12安装Latestreleas基于Redis实现延时队列服务Java研发军团0阿里二面:Redis 可以用来做消息队列么?JavaGuide0Kue基于 Redis 的优先级队列Kue 是一款为 node.js 而构建,由 redis 支持的优先级队列。更新记录:0.9 -&g如何用 Redis 实现延迟队列?架构之美0点赞 评论 收藏 分享 手机扫一扫分享分享 举报