【发布时间】:2022-03-29 05:45:18
【问题描述】:
我正在使用 ioredis。 为了防止可能导致我的应用程序崩溃的巨大缓冲区,我想在 redis 关闭时忽略请求,并捕获这些请求。 有什么方法可以实现吗?
【问题讨论】:
我正在使用 ioredis。 为了防止可能导致我的应用程序崩溃的巨大缓冲区,我想在 redis 关闭时忽略请求,并捕获这些请求。 有什么方法可以实现吗?
【问题讨论】:
您可以使用circuit breaker design pattern。
断路器是现代软件开发中使用的一种设计模式。它用于检测故障,并封装了防止故障不断重复发生、维护期间、临时外部系统故障或意外系统故障的逻辑。
通常断路器可用于检查外部服务的可用性。外部服务可以是数据库服务器或应用程序使用的 Web 服务。
Martin fowler 的 blog post 有一个很好的解释和关于如何做的基本实现。
【讨论】:
对于其他需要更多帮助的人。这会拦截对 ioredis 的推荐,如果它未处于就绪状态,则返回 false。
// Proxify commands to redis client.
// If redis is unavailable then return false.
// This stops everything dying if redis is down.
module.exports.redis = new Proxy(client, {
get(target, property, receiver) {
if (client.status !== 'ready') {
return (() => false);
}
return Reflect.get(target, property, receiver);
},
});
【讨论】: