~/VibeHandbook
$39

データベース

redis.io

Redis

概要

Redisはインメモリデータストアで、極めて高速な読み書きのためにデータをRAMに保持し、オプションでディスクへの永続化も行えます。キーバリューストアとして機能しますが、リスト、セット、ソート済みセット、ハッシュ、ストリームといった豊富なデータ構造をサポートします。プライマリデータベースと併用して、キャッシュ、セッションストア、キュー、レートリミッターとして使われることが最も多いです。

強み

  • インメモリ動作によるサブミリ秒のレイテンシ。
  • 多彩な構造:文字列、ハッシュ、リスト、セット、ソート済みセット、ストリーム。
  • 組み込みのTTL/有効期限により、キャッシュやセッションに最適。
  • 安全なカウンターやロックのためのアトミック操作とLuaスクリプティング。
  • pub/subとストリームがメッセージングやイベントパイプラインをサポートする。

トレードオフ

  • データは利用可能なメモリによって制限され、大規模なデータセットはコストが高くつく。
  • 永続化はオプションで、クラッシュ時に直近の書き込みを失うことがある。
  • 耐久性のあるリレーショナルストアの代わりにはならない。
  • クラスタリングは、シャーディングやフェイルオーバーのための運用上の複雑さを増す。

使いどころ

高コストなクエリ結果のキャッシュ、セッションの保存、レートリミットの実装、ジョブキューの管理、リーダーボードの構築、リアルタイムメッセージの受け渡しに、Redisを使いましょう。信頼できる情報源を保持する耐久性のあるデータベースと組み合わせて使います。

バイブコーディングとの相性

AIに指示を出す際は、Redisがシステムオブレコードではなくキャッシュや補助的なストアであることを明確にし、キャッシュエントリには常にTTLを設定させ、明確なキー命名スキーム(例:user:123:profile)を設計させましょう。競合し得るread-modify-writeのシーケンスではなく、カウンターにはINCR、ロックにはSET ... NX EXのようなアトミックなコマンドを使わせます。良いコツとして、AIにはcache-asideパターン(キャッシュを読み、なければデータベースにフォールバックし、その後キャッシュを埋める)を実装させ、古いデータが残らないよう無効化戦略を説明させましょう。

# 1時間の有効期限つきで値をキャッシュする
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600

# アトミックなレートリミットカウンター
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60

# 分散ロック:存在しない場合のみセットし、自動で期限切れにする
SET lock:job:42 "owner-a" NX EX 30

# ソート済みセットによるリーダーボード
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES