redis队列任务是怎样执行的?

并发问题可以用锁解决,比如乐观锁,悲观锁,但是看到很多提到使用redis队列解决,那整个过程是在怎样的.
是否像这样:
接口里面收到请求,将任务参数push到redis队列里,接下来需要执行处理队列任务,这个执行操作是不是要不停去查询redis队列,查询到有任务就去执行.
假如并发1000个请求,既然是队列,那岂不是最后一个完成的要等待很长时间?

阅读 2.2k
1 个回答

队列不就是先进先出的一种数据格式吗?他实现的原理本来就是强行把多线程转为单线程来避免并发导致的一些问题。
我目前使用过是两个场景

  1. 操作的时候需要请求第三方接口,比如发邮件,地址编码这些,或者需要时间比较长的,我会使用异步的方式执行,其实就是执行一个队列的处理任务,这样用户是不会有感知的。
  2. 抢购这种逻辑,用户点击抢购我会把他放到队列里面,比如抢购1000台,队列里面够了1000(一般会上浮一下)我会给后面的直接返回抢购完的页面,1000内的我会返回一个等待的页面,然后后台处理完成后使用websocket一类的方式再让用户跳转,一般以现在的运算水准来说这个过程3秒顶天了。

其实队列任务就是优化用户体验和降低后台处理难度的一种方式,你直接在逻辑里面处理也可以,但是你解决并发问题,还要解决在需要长时间执行任务的情况下页面的假死问题,还有浏览器超时,第三方返回错误。不是不能解决,很烦,我刚开始尝试过,差点摔键盘。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题