Redis 断开连接也会使节点 js 服务器崩溃

时间:2021-05-02 10:42:30

标签: javascript node.js redis

在阅读了许多堆栈溢出错误后,我仍然无法解决这个问题。我已经设置了一个 redis 服务器来缓存来自我的节点 js 服务器的数据,只要 redis 服务器正在运行,它就可以正常工作,但是一旦我关闭 redis 服务器,节点服务器就会崩溃。我希望即使 redis 服务器关闭,服务器也能继续工作

这是我的代码

import Product from '../models/productModel.js'
import User from '../models/userModel.js'
import slugify from 'slugify'
import redis from 'redis'
import mongoose from 'mongoose'

//connection to redis
const redisClient = redis.createClient(6379)  //cause for error when redis server is down



export const listAll = async (req, res) => {
try {
const products = await Product.find({})
  .limit(parseInt(req.params.count))
  .populate('category')
  .populate('subs')
  .sort([['createdAt', 'desc']])
  .exec()
 if (products !== null) {
  redisClient.setex(req.params.count, 60, JSON.stringify(products))
 }
res.json(products)
} catch (err) {
console.log(err)
}
}

当我停止 redis 服务器时,我收到一个 ECONNREFUSED 错误。有没有办法让我的节点服务器即使在 redis 服务器停止时也能继续运行,因为 redis 服务器只是一种支持机制,如果缓存数据不可用,无论如何都从 db 获取数据

有没有办法检查 redisClient 是否未定义或为空,我可以设置它来检查 redis 服务器是否关闭,然后我可以使用它来适当地发出请求

1 个答案:

答案 0 :(得分:0)

根据node-redis Error Handling的文档,你试过这个吗?

client.on("error", function(err) {
  assert(err instanceof Error);
  assert(err instanceof AbortError);
  assert(err instanceof AggregateError);

  // The set and get are aggregated in here
  assert.strictEqual(err.errors.length, 2);
  assert.strictEqual(err.code, "NR_CLOSED");
});