簡體   English   中英

Redis 斷開連接也導致節點 js 服務器崩潰

[英]Redis disconnection crashing node js server as well

在閱讀了許多堆棧溢出錯誤后,我仍然無法解決這個問題。 我已經設置了一個 redis 服務器來緩存來自我的節點 js 服務器的數據,只要 redis 服務器正在運行,它就可以正常工作,但是一旦我關閉 Z86A1B907D54BF70103794BF316E183E6 服務器就會崩潰即使 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是否未定義或 null 我可以設置以檢查 redis 服務器是否已關閉,然后我可以使用它來適當地發出請求

根據 node-redis錯誤處理的文檔,你試過這個嗎?

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");
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM