😊

upstash の Redis に ioredis で接続する

2024/07/19に公開

無料でも使える Redis (を含む)サービス upstash を使ってみている。

基本は upstash の SDK で接続するようだが、ioredis を使う方法も示されていたので試したのだけど、うまく行かなくて試行錯誤したので、記録しておく。

https://upstash.com/docs/redis/howto/connectwithtls#node-js には、

const Redis = require("ioredis");

let client = new Redis("rediss://:YOUR_PASSWORD@YOUR_ENDPOINT:YOUR_PORT");
await client.set("foo", "bar");
let x = await client.get("foo");
console.log(x);

でイケると紹介されていたが、:YOUR_PASSWORD@YOUR_ENDPOINT の先頭の : を見落としていて、ずっと繋がらないというエラーで悩んでた。

一応、そのときの副産物として、以下のコードでも接続できた。

const Redis = require("ioredis");

const client = new Redis(YOUR_PORT, 'rediss://YOUR_ENDPOINT', {
  password: 'YOUR_PASSWORD'
});

AWS の Redis なんかだとホストの rediss:// は要らなかったのでそこもハマりポイントだった。

以下は接続できなかったパターン。

const client = new Redis({
  host: 'rediss://YOUR_ENDPOINT',
  port: YOUR_PORT,
  password: 'YOUR_PASSWORD'
});

const client = new Redis({
  host: 'YOUR_ENDPOINT',
  port: YOUR_PORT,
  password: 'YOUR_PASSWORD'
});

new Redis(port, host, { password }) が OK で、
new Redis({ port, host, password }) が NG なのがよく分からん。

Discussion