《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中移除即可。 浏览 20点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 Redis in ActionRedis in Action0Redis in ActionRedis is an innovative data tool that offers more 《redis in action》redis事务写点笔记0《redis in action》redis复制写点笔记0《redis in action》redis发布订阅写点笔记0《redis in action》Redis分布式锁写点笔记0《redis in action》Redis aof持久化写点笔记0《redis in action》redis持久化简介写点笔记0《redis in action》Redis灾备处理写点笔记0《redis in action》redis事务和管道写点笔记0点赞 评论 收藏 分享 手机扫一扫分享分享 举报