ablog

不器用で落着きのない技術者のメモ

Redis の Ruby Client

Black Belt Online Seminar ElastiCache
P.20
f:id:yohei-a:20210903064431p:plain

redis-rb

ElastiCache(Redis) クラスターの configuration エンドポイントに対応している。

そして、以下試した所いけた!嬉しかった!

Redis.New(cluster: ["rediss://<configuration endpoint>:6379"])
ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blog

クラスターモード使用時は複数キーにアクセスする mget はエラーになる可能性があるので、使わないでおきましょうと言う話。キーでシャーディングしているので、そらそうでしょうね。

クラスターモード使用時の注意

クラスターモード有効時に https://redis.io/commands/mget:titleredis.mget を使用した際に CROSSSLOT Keys in request don't hash to the same slot のエラーが確認されました。

redis = Redis.new(cluster: ["rediss://<elasticache configuration endpoint>:6379"])

redis.set('key1', 'hogehoge')
redis.set('key2', 'mogemoge')

p redis.get('key1') # => hogehoge
p redis.mget('key1', 'key2')  # => Redis::CommandError (CROSSSLOT Keys in request don't hash to the same slot)

以下にサンプルもあり、呼び出しコマンドで クロススロットコマンドは避けてね、とあります。
https://github.com/redis/redis-rb#cluster-support

The calling code is responsible for avoiding cross slot commands.
ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blog

この方がスケールアウト/イン、スケールアップ/ダウン時の検証を行った結果は以下の通りだったらしい。

スケーリング中のアクセスは本当に処理され続けるのか?

実際に以下実施しながら、 set, get を実行しましたが、特に問題なくリクエストは処理され続けられました。

  • 水平スケール
    • シャード追加 Add shards
    • シャード削除 Delete shards
    • レプリカ追加 Add Replicas
    • レプリカ削除 Delete Replicas
  • 垂直スケール

メンテに強い、Redis クラスターモード!

ruby で ElastiCache Redis (クラスターモード有効) 利用でハマった所 - 長生村本郷Engineers'Blog