我编写了一个使用redis的简单服务,将数据存储在内存中或从磁盘中获取数据,然后再存储在内存中,并希望为慢速请求设置超时。我希望找到一种方法来使带有超时的get请求防止这种请求挂起。任何帮助表示赞赏。
答案 0 :(得分:0)
因此,您可以在此处做一些事情。但是,首先,我想知道您是否正在尝试过早的优化。在大多数情况下,Redis的运行速度非常快,如果在客户端上发现性能问题,则表明您的数据或在Redis中的处理方式存在问题。应该在redis中修复此问题,您无需在客户端中处理缓慢的请求。
因此,如果您偶尔看到速度变慢,那么它们是由什么引起的呢?这不是正常的Redis问题,应该解决而不是寻找JavaScript修复程序。
如果您仍在寻找JavaScript修复程序,则可以执行以下操作:
const client = require('redis').createClient(...);
export async function asyncSetEx(key) {
return new Promise((resolve, reject) => {
const timer = setTimeout(() => {
reject(new Error('Timed out'));
});
client.setEx(key, (res, err) => {
if (err) {
reject(err);
} else {
resolve(res);
}
clearTimeout(timer);
});
});
}
不过,我建议对此进行概括,以使其适用于具有任意数量参数的任何redis函数。
答案 1 :(得分:0)
防止这个请求挂起
如果将 enable_offline_queue
设置为 false
,所有 Redis 命令将立即抛出异常,而不是等待重新连接。然后,您可以捕获该异常并从光盘或某个数据库中获取数据。
在文档中找不到关于此的任何内容,并在 SO 上发现了许多此类问题,因此发布在这个旧问题中。
请记住,当 enable_offline_queue
设置为 false 时,您在服务器出现连接问题时发出的命令将永远不会执行。