Redis超时处理法是将超时处理任务与检测超时分离,分别由定期尝试调用超时处理函数和将执行即将超时任务及其超时时间存储在Redis中两个客户端来完成。
### 一、客户端1——定期尝试调用超时处理函数
定期尝试调用超时处理函数的客户端一般是一个Redis服务器的客户端,每隔一段时间(比如1-3秒)从Redis中取出超时任务,然后调用其超时处理函数,完成超时处理任务。此客户端的大体步骤如下:
1. 从Redis的list类型的key中获取需要处理的任务;
2. 调用任务相关的超时处理函数;
3. 删除已处理的任务;
以Node.js为例,定期尝试调用超时处理函数的客户端可以编写成如下代码:
“`js
const Redis = require(‘ioredis’);
const redis = new Redis();
const rpopAndDoTimeout = async function () {
let listKey = `timeout-task-list`;
const taskObj = awt redis.rpop(listKey);
if (taskObj) {
const timeoutEntity = JSON.parse(taskObj);
doTaskTimeout(timeoutEntity);
}
};
// 定时任务
setInterval(rpopAndDoTimeout, 1000);
### 二、 客户端2——将执行即将超时任务及其超时时间存储在Redis中
将执行即将超时任务及其超时时间存储在Redis中一般是另一个Redis服务器的客户端,用户每次产生一个新任务或者修改已有任务,都会通过此客户端将该任务及其超时时间存入Redis中。其大体步骤如下:
1. 用户提交新任务;
2. 计算并设置任务的超时时间;
3. 将任务及其超时时间(使用EPOCH时间格式存储)组装成任务信息放入Redis的list类型的key;
以Python为例,将执行即将超时任务及其超时时间存储在Redis中的客户端可以编写成如下代码:
```py
import json
import redis
import time
def pushTimeoutTaskToRedis(timeoutEntity):
# T【任务超时时间】
T = time.time() + timeoutEntity.timeout
task_obj = {
"id": timeoutEntity.id,
"ttl": T
}
task_str = json.dumps(task_obj)
# 将任务放入Redis中
r = redis.Redis(host='localhost', port=6379, db=0)
list_key = "timeout-task-list"
r.lpush(list_key, task_str)
通过以上两个客户端设计,就可以用redis来实现优雅解决超时问题。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
当前名称:Redis超时处理法优雅解决超时问题(redis超时怎么处理)
文章位置:http://www.shufengxianlan.com/qtweb/news44/458394.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联