Carpe Diem

備忘録

Redis

go-redisのtimeoutで気をつけること

概要 Go言語でRedisを使う際に選択肢に挙がるのがgo-redisです。 今回はgo-redisでTimeoutを設定する際に注意すべきことをまとめました。 手前味噌ですがBlast Radius of Failureを最小にするためにTimeoutを短くすることを1つのテクニックとしても紹介して…

RedisのLua Scriptを使う

概要 前回PipelineやMultiでは読み出したデータを意思決定に使えないという課題があり、代わりにWatchで楽観ロックを用いるという旨を説明しました。 christina04.hatenablog.com Lua Scriptを使えば楽観ロックを用いずとも上記の課題を解決することができま…

RedisのPipeline, Multi, Watchの区別

概要 RedisのPipeline, Multi, Watchの区別をする上であまりシーケンス図を用いた説明がなかったので図示してみました。 解説 Pipeline 課題 通常複数の処理を実行しようとすると以下のような流れになります。 シンプルではありますが都度サーバ通信が入ると…

go-redisのRingの挙動を検証してみる

概要 Redis Clusterが生まれるまではRedisの水平スケール手段としては前回紹介した Consistent Hashing (コンシステントハッシュ法) - Carpe Diem を用いた手法が使われていました。 これはRedis Ringと呼ばれる形でいくつかのライブラリでサポートされて…

Redisを使った分散ロック (SETNX, Redlock)

概要 分散システムにおいて同じリソースにアクセスする際にロック(排他制御)する仕組みを分散ロックといいます。 ロックを用いる背景としては主に2つあり、 目的 説明 具体例 効率 同じ作業を不必要に複数回行わないため キャッシュのOriginへのリクエス…

Redis Clusterを冗長構成で構築

概要 前回はマスターのみでRedis Clusterを構築しました。 christina04.hatenablog.com 今回は冗長構成で構築し、可用性を確認します。 環境 Redis 5.0.7

Redis Clusterの構築と水平スケーリング

概要 christina04.hatenablog.com 前回の続きで今度はRedis Clusterを構築してスケール性などを検証してみます。 環境 Redis 5.0.7 Redis Clusterの特徴 Redis Clusterは以下の特徴を持ちます。 シャード毎にSlotを持ち、データ分散される(hash slot) 全部…

RedisのReplication

概要 Redisの冗長構成は Replication Cluster Sentinel の3種類がありますが、そのうちのReplicationについて説明します。 環境 Redis 5.0.7 Replication Replicationはmasterからデータをreplicaにコピーし、read系コマンドをreplicaから行うことでスケー…

BLPOPで優先順位を付けてタスクキューを実行

概要 タスクキューを操作する時に、特定の処理が他の処理よりも先に実行できるよう優先順位を付けたいケースがあります。 RedisのBLPOPは複数のリストを処理してくれるのでそれを実現できます。 前提 以下の優先度を決めたキューがあるとします。 キュー名 …

データ毎に実行スケジュールが異なる場合の実装方法を考えてみる

概要 Stripeの定期購読を使っていると、各ユーザの定期購読の更新タイミングでWebhook eventがちゃんと飛んできます。 ほぼリアルタイムで届くのでこのwebhookを使う側としては非常に助かる機能ですが、提供する立場から考えるとどうやるんだろう?と悩んだ…