范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

你知道Redis可以实现延迟队列吗?

  推荐阅读:基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享基于Spring Cloud微服务化开发脚手架平台源码免费分享基于springboot2.0跟layui构建的前后端分离后台管理系统源码分享
  最近,又重新学习了下Redis,深深被Redis的魅力所折服,我才知道Redis不仅能快还能慢(我想也这么优秀o(╥﹏╥)o),简直是个利器呀。
  咳咳咳,大家不要误会,本文很正经的啦!
  好了,接下来回到我们的话题,我们都知道Redis是一种基于内存的单进程单线程数据库(Redis6.0开始之后支持多线程啦!),处理速度都非常快。那么为何Redis又能慢呢?原来,这里说的慢是指Redis可以设置一些参数达到慢处理的结果。(这就是为什么Redis既能快又能慢啦!)
  那接下来开始讲讲我们的楷模Redis在队列中如何实现延时的情况:
  在我们日常生活中,我们可以发现,在淘宝、京东等购物平台上下单,超过一定时间未付款,订单会自动取消。打车的时候,在规定时间没有车主接单,平台会取消你的单并提醒你暂时没有车主接单。点外卖的时候,如果商家在10分钟还没接单,就会自动取消订单。收快递的时候,如果我们没有点确认收货,在一段时间后程序会自动完成订单。在平台完成订单后,如果我们没有在规定时间评论商品,会自动默认买家不评论。.......还有很多这样的场景。
  这时,我们可以想想为什么要这样做?
  因为这样可以保证商品的库存可以释放给其他人购买,你可以不用一直等待打车却得不到回复,你可以及时换一家店点到外卖。
  那么这些情况都是如何实现的呢?
  这时我们可以看看这个图,来看看消息延迟是如何处理的:
  当用户发送一个消息请求给服务器后台的时候,服务器会检测这条消息是否需要进行延时处理,如果需要就放入到延时队列中,由延时任务检测器进行检测和处理,对于不需要进行延时处理的任务,服务器会立马对消息进行处理,并把处理后的结果相应返会给用户。
  对于在延时任务检测器内部的话,有查询延迟任务和执行延时任务两个职能,任务检测器会先去延时任务队列进行队列中信息读取,判断当前队列中哪些任务已经时间到期并将已经到期的任务输出执行(具有实时性,会存在一定的时间误差,因为这个是定时任务)。
  这时,我们可以想一想在Redis的数据结构中有哪些能进行时间设置标志的命令?
  是不是想到的 zset 这个命令,具有去重有序(分数排序)的功能。没错,你想对了呀!
  我们可以使用 zset(sortedset)这个命令,用设置好的时间戳作为score进行排序,使用 zadd score1 value1 ....命令就可以一直往内存中生产消息。再利用 zrangebysocre 查询符合条件的所有待处理的任务,通过循环执行队列任务即可。也可以通过 zrangebyscore key min max withscores limit 0 1 查询最早的一条任务,来进行消费。
  总的来说,你可以通过以下两种方式来实现((*^▽^*)如果你想到其他方法,也可以告诉我下呀~):使用zrangebyscore来查询当前延时队列中所有任务,找出所有需要进行处理的延时任务,在依次进行操作。查找当前最早的一条任务,通过score值来判断任务执行的时候是否大于了当前系统的时候,比如说:最早的任务执行时间在3点,系统时间在2点58分),表示这个应该需要立马被执行啦,时间快到了(冲冲冲,他来了他来了,他带着死神的步伐来了)。
  我们可以想一想Redis来实现延时队列有何优势呢?
  其实,Redis用来进行实现延时队列是具有这些优势的:Redis zset支持高性能的 score 排序。Redis是在内存上进行操作的,速度非常快。Redis可以搭建集群,当消息很多时候,我们可以用集群来提高消息处理的速度,提高可用性。Redis具有持久化机制,当出现故障的时候,可以通过AOF和RDB方式来对数据进行恢复,保证了数据的可靠性
  这时候,会有小伙伴问了还有没有其他实现延时队列的方式呀!emmm....当然有的,只有想不到的没有做不到(O(∩_∩)O哈哈~,开玩笑)一、用消息中间件实现延时队列
  (1)通过 RabbitMQ 来实现延时队列,也就是用消息中间件来实现延时队列啦~
  方法一:在MQ中我们可以对Queue设置 x-expires 过期时间或者对 Message设置超时时间x-message-ttl。
  (这里要注意下:延时相同的消息我们要扔到同一个队列中,对于每一个延时要建立一个与之对应的队列—这是由于MQ的过期检测是惰性检测的。)
  方法二:我们可以用RabbitMQ的插件rabbitmq-delayed-message-exchange插件来实现延时队列。达到可投递时间时并将其通过x-delayed-type类型标记的交换机类型投递至目标队列。
  (2)RocketMQ实现延时队列
  rocketmq在发送延时消息时,是先把消息按照延迟时间段发送到指定的队列中(把延时时间段相同的消息放到同一个队列中,保证了消息处理的顺序性,可以让同一个队列中消息延时时间是相同的,整个RocketMQ中延时消息时按照递增顺序排序,保证信息处理的先后顺序性。)。之后,通过一个定时器来轮询处理这些队列里的信息,判断是否到期。对于到期的消息会发送到相应的处理队列中,进行处理。
  哈哈,目前RocketMQ只支持特定的延时时间段,1s,5s,10s,...2h,不能支持任意时间段的延时设置。有兴趣的小伙伴可以去了解下它是相关知识呀~
  二、Kafka实现延时队
  Kafka基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer),Kafka中的时间轮(TimingWheel)是一个存储定时任务的环形队列,可以进行相关的延时队列设置。
  三、Netty实现延时队列
  Netty也有基于时间轮算法来实现延时队列。Netty在构建延时队列主要用HashedWheelTimer,HashedWheelTimer底层数据结构是使用DelayedQueue,采用时间轮的算法来实现。
  四、DelayQueue来实现延时队列
  Java中有自带的DelayQueue数据类型,我们可以用这个来实现延时队列。DelayQueue是封装了一个PriorityQueue(优先队列),在向DelayQueue队列中添加元素时,会给元素一个Delay(延迟时间)作为排序条件,队列中最小的元素会优先放在队首,对于队列中的元素只有到了Delay时间才允许从队列中取出。这种实现方式是数据保存在内存中,可能面临数据丢失的情况,同时它是无法支持分布式系统的。

中国移动杨杰勇担重任,助力数字经济蓬勃发展11月1日3日,中国移动全球合作伙伴大会在广州拉开帷幕,本次大会以数即万物,智算未来为主题,包含主论坛分论坛展览系列活动展销等众多环节。其主论坛于11月2日上午举行,中国移动董事长中国移动发布泛全联盟合作升级计划及HDICT数智生活计划11月2日,以泛全联盟新升级数智生活新生态为主题的泛终端全渠道联盟暨智慧家庭生态合作论坛在广州成功举办。作为2021中国移动全球合作伙伴大会期间举办的重要主题论坛之一,该论坛吸引了中国移动简勤共谋合作共赢新模式,共创生态共荣新格局11月1日,2021年中国移动全球合作伙伴大会在广州召开。这是中国移动规模最大最具影响力的年度盛会,并持续三天。本次大会以数即万物,智算未来为主题。大会期间,数百位行业伙伴共话数智聊聊RedmiK40系列的一些细节K40背后开孔都是什么?从拆机图来看,K40中间微距镜头旁那个开孔并不是假的,有排线,是后置光线传感器,用于自动调节屏幕亮度。闪光灯下面的开孔则是后置色温传感器,前面也有一颗,用于RedmiK40系列三款机型对比,发现标准版竟如此之好RedmiK40系列此次发布三个版本,分别为1999起的K402799起的K40Pro3699的K40Pro,理论来说一般这种三杯齐发的机型,大杯往往都是最香的,而这次的K40系列RedmiK40系列官宣大量信息,标准版比K30S更香今日RedmiK40系列正式预热,首张海报就预热的是外观,但海报中信息很多,首先K40系列的镜头设计与小米11风格相同,其采用后置3摄,中间那颗旁边的应该是后置光感,另外按键处这种魅族18系列仍是一股清流,亮点都与别人不同魅族的手机从始至终在国产机圈里都属于一个异类,在其它品牌都用刘海水滴屏时,魅族选择上下对称全面屏,在大家都用矩阵设计时,魅族选择一个防爆盾设计,感觉魅族就是有这种倔强,就是要打差异K40系列三种配色对比,白色版异常好看这次的K40系列在配色上下了功夫,相比前代K系列,不仅好看而且精致不少,另外这次K40的官方手机壳也非常的潮,也就是说,不管带不带壳,颜值是在线的。这次K40的白色配色,因为加入A理光GR3快拍模式Snapshot使用心得理光GR3理光GR3是一台极其小巧轻便低调的卡片机,其中最让我喜爱的功能就是快拍模式Snapshot。快拍模式是指相机设置固定对焦距离,拍照时就可以不用对焦,这样可以大大提升抓拍速等等党最难等的一款手机,小米11即将开售今晚0点,小米11将正式开售,目前该机京东平台预约人数已经达到85万,虽说这次小米11备货非常充足,但不排除要抢的可能,所以准备入手的同学定好闹钟!而关于这款手机,目前国外网友好评匠心独具丨绯乐研发团队为LatexAR700再注心血引言自2019年Apple将主动降噪技术通过AirPodsPro带进大众视野以来,入耳式无线蓝牙耳机逐渐成为人们生活中不可或缺的一部分。如今,随着平均佩戴时长日益增长,耳帽损耗也一
内行人告诉你3000以内,下半年的3大降价机型千万别错过目前2021年已经年过半百,即将进入九月份也就是21年的最后一个季度,在年底很多厂商都要开始冲业绩随即也有不少新机发布,然而也诞生了不少降价机!你会选择谁?一。iphoneXRXR洗烘一体智能洗护,TCL这款滚筒洗衣机轻松开启你的智能生活近些年来,随着科技的飞速发展,不少科幻电影中的场景已经变成了现实。比如,通过佩戴VR眼镜,我们不仅能够身临其境般地观看好莱坞大片,而且也能置身于虚拟的游戏世界之中,可以说打破了现实苹果手机换华为手机如何快速同步数据?教你一招轻松实现它随着人们日常生活越来越离不开智能手机的支持,人们每隔一年或几年的时候更换手机也是一件非常正常的事情。因为智能手机随着使用时间的增加,手机的内存会越来越小,导致手机越用越卡。当然了,宝马推出全新迷你概念电动自行车CE02在全面推进电气化的几年时间里,宝马的摩托车部门一直在推出一些疯狂的概念。现在该部门再次推出了一款非常酷炫的电动自行车CE02。它是一辆小型二轮车,将亮相本周在德国召开的IAA移动通8月汽车投诉排行长安UNIT登榜首,宋PLUS新能源进前三文蓝湛进入9月,车质网8月份汽车投诉排行也随之出炉,今天就跟随笔者了解一下吧。从具体排名来看,8月登上投诉榜前十的有7款SUV3款轿车,其中自主品牌6款,合资品牌4款。长安UNITvivoNEX5即将复出,后置五摄144Hz骁龙898,vivo开始大爆发近年来,vivo的市场表现有目共睹,vivo线上线下的整体销量和小米旗鼓相当。今年上半年虽然小米的全球销量登上了第二的位置,但是在国内市场和亚太市场变成了vivo的天下,vivo成值得支持,比亚迪上个月卖出6。763万辆车快车报最新消息,9月3日,比亚迪汽车公布了8月份的全国销量数据,比亚迪乘用车8月份累计卖出6。763万辆,同比增长90。5,环比增长18。7其中新能源乘用车销售再创新高,达到6。0顺利通过晚高峰的城中村,无人驾驶可能离我们不远了虽然前段时间发生了多起和辅助驾驶有关的交通事故,但现阶段量产车型的所谓自动驾驶,都仅仅是辅助驾驶功能。可能有厂商在辅助驾驶的宣传上有误导,不过真正的自动驾驶到来的那天,它可能真的会争论结束了?刘强东还是比马云更有远见,京东成了一家实体公司?世人皆知,美国人发明了互联网技术,美国也由此诞生了诸如亚马逊Facebook推特以及谷歌等这一类互联网公司。而放眼全球互联网行业,能与美国互联网行业相媲美的,也只有中国互联网行业。让人惊喜的极狐阿尔法T,4。6s破百,比特斯拉ModelY帅,还不贵新能源车该有的样子极狐品牌作为新能源汽车最具有影响力的一个自主品牌。旗下车型凭借着出色的品质取得了不错的销量成绩。比如说极狐阿尔法S这款车销量一直很不错,是旗下的得力干将。而除了它外媒公布iPhone13配置表支持120Hz高刷,最高25W快充预计本月中旬,苹果即将举办秋季新品发布会,正式发布iPhone13系列苹果智能手表等新机。根据外媒最新公布的消息,iPhone13系列内存空间为64GB起步,而13Pro系列则是1