《redis in action》Redis做队列

使用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中移除即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值