nodeのredisライブラリをver4に上げたらSocket closed unexpectedlyが発生

2024/05/22に公開

Node-Redisについて

Node RedisはNode環境上で利用できるRedisクライアントライブラリ。
このライブラリにはVer3からお世話になっていたが、Ver4にアップグレードしたときにSocket closed unexpectedlyというエラーが発生した。

原因

使用していたRedisサーバーはクリーンアップのためにアイドル時間が10分経過するとタイムアウトが発生してコネクションが切断されてしまう。その結果、Socket closed unexpectedlyが発生していた。おそらくVer3でもこのエラーは発生していたが通知されていなかったと考えられる。

対処方法

タイムアウトが発生してないように定期的にPingを送信すればよい。幸いなことにRedisクライアントにはクライアントのインスタンスを生成するときにPingを定期的に送信するためのプロパティが用意されているので、そのプロパティに何秒間隔でPingを送信するかを指定すればよいだけ。

const redisClient = createClient({
url: process.env.REDIS_URL,
pingInterval: 10000, //ms単位でpingの送信間隔を指定
});

参考資料

https://github.com/redis/node-redis/issues/2032
https://github.com/redis/node-redis/issues/2058

Discussion