当前位置:网站首页>Leader: who can use redis expired monitoring to close orders and get out of here!
Leader: who can use redis expired monitoring to close orders and get out of here!
2022-06-30 18:49:00 【Java R & D Corps】
I read teacher a Niu's masterpiece a few days ago Leader : Who uses the scheduled task to close the order , Get out of here ![1] It is found that the scheme has several flaws , Here are some suggestions for discussion .
In the electricity supplier 、 Payment and other fields , There are often such scenes , The user gave up payment after placing an order , The order will be closed after the specified time period , Careful, you must have found something like a treasure 、 A certain East has such logic , And the time is accurate , Error in 1s Inside ; How did they achieve it ?
There are several general implementation methods :
Use rocketmq、rabbitmq、pulsar Wait for the delayed delivery function of the message queue Use redisson Provided DelayedQueue
There are some schemes that are widely circulated but have fatal defects , Don't use it to implement deferred tasks
Use redis Expired monitoring for Use rabbitmq The dead letter line Use non persistent time wheels
redis Overdue monitoring
stay Redis The official Manual of keyspace-notifications
: timing-of-expired-events
It is clearly stated in :
Basically expired events are generated when the Redis server deletes the key and not when the time to live theoretically reaches the value of zero
redis The implementation of automatic expiration is : Scheduled task offline scan and delete some expired keys ; Lazy checking for expiration when accessing keys and deleting expired keys .redis There is no guarantee that it will be deleted and sent an expiration notice at the set expiration time . actually , It is also common that the expiration notification is several minutes later than the set expiration time .
In addition, the key space notification is sent and forgotten (fire and forget
) Strategy , Delivery is not guaranteed like message queuing . When a client subscribes to events, it will lose all the events distributed to it during disconnection .
This is a more “LOW” Solutions for , Please do not use .
Another big guy did the test Don't rely too much on Redis Expired monitoring for [2], If you are interested in it, you can check it by yourself .
rabbitmq Dead letter
Dead letter (Dead Letter
) yes rabbitmq
A mechanism provided . When a message meets one of the following conditions, it will become dead letter :
Message denied confirmation ( Such as channel.basicNack
) And at this point requeue Property is set to false.The message's lifetime in the queue exceeds the set TTL Time The number of messages in the message queue has exceeded the maximum queue length
If dead letter queue is configured , Dead letter will be rabbitmq Put it in the dead letter queue .
stay rabbitmq The process of creating a dead letter queue in the :
Create a switch as a dead letter switch Configure in the business queue x-dead-letter-exchange
andx-dead-letter-routing-key
, Set the switch in the first step as the dead letter switch of the service queueCreate a queue on the dead letter switch , And listen to this queue
Dead letter queue is designed to store messages that are not normally consumed , Easy to check and re deliver . The dead letter queue also does not guarantee the delivery time , Before the first message becomes a dead letter , The following messages will not be delivered as dead letters even if they are expired .
To solve this problem ,rabbit The official launch of the delayed delivery plug-in rabbitmq-delayed-message-exchange
, It is recommended to use the official plug-in for delay messages .
Here's a digression , Use redis Overdue monitoring or rabbitmq The dead letter queue uses Middleware in a way unexpected to the designer , There are some hidden dangers in this unexpected behavior , Such as lack of consistency and reliability assurance , Low throughput 、 Resource leakage, etc . A famous example is that many people use redis Of list As message queue , So that the last author can't read and write disque And finally evolved into
redis stream
. Try not to abuse middleware at work , Do professional things with professional components
Time wheel
Time wheel is an excellent data structure for timed tasks , However, the vast majority of time wheel implementations are pure memory without persistence . After the process running the time wheel crashes, all the tasks in it will disappear , So I advise you to use it carefully .
redisson delayqueue
redisson delayqueue
It's based on redis zset
Implementation of delay queue based on .delayqueue
One of them is called timeoutSetName
Ordered set of , Of the elements score
Is the delivery timestamp .delayqueue
Can use regularly zrangebyscore
Scan messages that have reached the delivery time , Then move them to the ready message list .
delayqueue
Guarantee redis Messages are not lost without crashing , Try it when you don't have a better solution .
When the database index is well designed , The overhead of regularly scanning the database for outstanding orders is not as large as expected . In the use of redisson delayqueue
The method of scanning the database can be used as the compensation mechanism when waiting for timed task middleware , Avoid task loss caused by middleware failure .
Conclusion
First of all, it is recommended to use rocketmq
、pulsar
And other message queues with scheduled delivery function .When it is not convenient to obtain a professional message queue, you can consider using redisson delayqueue
Based on redis Delay queue scheme , But for redis Design compensation protection mechanism in case of crash .When you can't use redisson delayqueue
You can consider using the time wheel . Because the time wheel restart is far better than redis Restart frequently , Protection mechanisms such as regular library scanning are more important .Never use redis Overdue monitoring implements scheduled tasks .
Reference resources :
https://juejin.cn/post/6987233263660040206
https://juejin.cn/post/6844904158227595271
source :cnblogs.com/Finley/p/16395466.html
END
Recommended reading
END
One click generation Springboot & Vue project !【 Bi set artifact 】
Java Visual programming tool series ( One )
Java Visual programming tool series ( Two )
By the way Recommend a GitHub project , This GitHub Thousands of commonly used technology books have been sorted out PDF, Most of the core technical books can be found here ,
GitHub Address :https://github.com/javadevbooks/books
The ebook has been updated , You can download what you need , Remember to order one star, Ongoing update ..

By the way Recommend a GitHub project , This GitHub Thousands of commonly used technology books have been sorted out PDF, Most of the core technical books can be found here ,
GitHub Address :https://github.com/javadevbooks/books
The ebook has been updated , You can download what you need , Remember to order one star, Ongoing update ..
边栏推荐
- Hospital online consultation applet source code Internet hospital source code smart hospital source code
- 【云驻共创】Huawei iConnect使能物联终端一触即联
- ForkJoinPool
- Multipass中文文档-设置图形界面
- C语言结构体
- Vulnerability recurrence ----37. Apache unomi Remote Code Execution Vulnerability (cve-2020-13942)
- System integration project management engineer certification high frequency examination site: prepare project scope management plan
- Flink series: checkpoint tuning
- Unity开发bug记录100例子(第1例)——打包后shader失效或者bug
- Glacier teacher's book
猜你喜欢
The easynvr platform equipment channels are all online. What is the reason for the "network request failure" in the operation?
Sword finger offer 16 Integer power of numeric value
Multipass Chinese document - setting graphical interface
ASP. Net password encryption and password login
depends工具查看exe和dll依赖关系
Geoffrey Hinton:我的五十年深度学习生涯与研究心法
AI chief architect 10-aica-lanxiang, propeller frame design and core technology
Redis - persistent RDB and persistent AOF
countdownlatch 和 completableFuture 和 CyclicBarrier
【TiDB】TiCDC canal_ Practical application of JSON
随机推荐
The online procurement system of the electronic components industry accurately matches the procurement demand and leverages the digital development of the electronic industry
ForkJoinPool
先写API文档还是先写代码?
What if the apple watch fails to power on? Apple watch can not boot solution!
TiDB Dashboard里面可以写sql执行吗
Development and construction of NFT mining tour gamefi chain tour system
删除排序链表中的重复元素 II[链表节点统一操作--dummyHead]
报名“互联网+”大赛华为云命题,诸多礼品任你拿!
程序员女友给我做了一个疲劳驾驶检测
Do you really understand the persistence mechanism of redis?
Tensorflow2 ten must know for deep learning
漏洞复现----37、Apache Unomi 远程代码执行漏洞 (CVE-2020-13942)
MySQL advanced - basic index and seven joins
ForkJoinPool
Tensorflow2 深度学习十必知
Infineon - GTM architecture -generic timer module
剑指 Offer 17. 打印从1到最大的n位数
亲测flutter打包apk后大小,比较满意
System integration project management engineer certification high frequency examination site: prepare project scope management plan
Vulnerability recurrence ----- 35. Uwsgi PHP directory traversal vulnerability (cve-2018-7490)