valkey について
Valkeyの利用方法を扱うスキルです。ValkeyはLinux Foundationが管理するオープンソースのRedis互換インメモリデータストアで、一般的なデータパターンや運用、Redisからの移行を解説します。
主な機能
- 01キャッシュとセッション保存のパターン
- 02レート制限と分散ロック
- 03キュー、Pub/Sub、ストリーム
- 04ソート済みセットのランキングとカウンター
- 05永続化、デプロイ、移行の指針
活用シーン
- 01有効期限付きキャッシュアサイドの適用
- 02キューまたはPub/Subワークフローの構築
- 03セッション保存とレート制限
- 04RedisからValkeyへの移行計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill valkeyインストール後、Claude Code で/valkeyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/caching-patterns.mdcommon-patterns.mddata-structures.mddocker-and-deployment.md詳細
Valkey
Linux Foundation が保守する、Redis 互換のオープンソースのインメモリデータストアです。Redis OSS 7.2.4(BSD 3-Clause ライセンス)からフォークされました。Redis OSS 2.x から 7.2.x までのドロップイン置換として使用でき、プロトコル、コマンド、データ形式は同じです。
使用する場面:キャッシュ、セッションストレージ、レート制限、Pub/Sub メッセージング、タスクキュー、リーダーボード、分散ロック、リアルタイムカウンター、またはサブミリ秒のキー・バリュー操作が必要なあらゆるワークロード。
使用しない場面:プライマリのリレーショナルデータストア、大きなオブジェクトストレージ(値が 512 MB を超える場合)、Lua スクリプトを使わずに複数キーにまたがる強整合性の ACID トランザクションが必要なワークロード。
クイックリファレンス
| タスク | 方法 | ポイント |
|---|---|---|
| キャッシュアサイド | GET -> ミス -> DB 読み取り -> SET key val EX ttl | 長めの TTL でも必ず設定する |
| セッションストレージ | HSET session:{id} field val + EXPIRE | リクエストごとにスライディング TTL を設定 |
| レート制限 | INCR + EXPIRE(固定ウィンドウ)またはソートセット(スライディング) | 精度が必要な場合はソートセットを使用 |
| 分散ロック | SET lock:{res} token NX PX 30000 | デッドロック防止のため、必ず有効期限を設定する |
| キュー(シンプル) | LPUSH + BRPOP | タイムアウト付きのブロッキングポップ |
| キュー(信頼性重視) | Streams + XGROUP + XACK | 少なくとも 1 回の配信にはコンシューマーグループを使用 |
| Pub/Sub | SUBSCRIBE / PUBLISH | 配信のみで、永続化されない |
| Streams | XADD + XREADGROUP | 永続化、再生可能、コンシューマーグループ対応 |
| リーダーボード | ソートセット:ZADD / ZREVRANGE | O(log N) の順位操作 |
| ユニーク数 | PFADD + PFCOUNT(HyperLogLog) | メモリ約 12 KB、誤差 0.81% |
| エビクションポリシー | maxmemory-policy allkeys-lru | 多くのワークロードで最適なデフォルト設定 |
| Docker のセットアップ | valkey/valkey:8.1-alpine | ヘルスチェック:valkey-cli ping |
| 永続化 | AOF(appendonly yes)+ RDB スナップショット | 耐久性には AOF、バックアップには RDB を使用 |
| クライアントライブラリ | ioredis または iovalkey(公式フォーク) | すべての Redis クライアントを変更なしで使用可能 |
| Redis からの移行 | バイナリを入れ替え、データファイルはそのまま使用 | Redis 7.2 まで RDB/AOF 互換 |
よくある間違い
| 間違い | 正しい方法 |
|---|---|
本番環境で KEYS * を使用する | イテレーションにはカーソル付きの SCAN を使用する |
| キャッシュキーに TTL を設定しない | 必ず TTL を設定する — 無制限な増加は OOM の原因になります |
大きなキーに DEL を使い、サーバーをブロックする | 非同期削除には UNLINK を使用する |
| 永続的なメッセージングに Pub/Sub を使用する | 永続化にはコンシューマーグループ付きの Streams を使用する |
| すべてのキーに同じ TTL を設定する(大量失効の集中) | ジッターを加える:EX (base + random(0, spread)) |
本番環境で maxmemory を設定しない | maxmemory とエビクションポリシーを明示的に設定する |
ロックに MULTI/EXEC を使用する | 分散ロックには SET ... NX PX を使用する |
| 大きなバイナリデータを保存する(値が 1 MB を超える場合) | 参照を保存し、値は小さく保つ |
| Docker Compose でヘルスチェックを設定しない | valkey-cli ping ヘルスチェックを追加する |
本番環境で requirepass を無視する | 必ず認証と ACL を設定する |
委任
- キャッシュパターンの調査とデータモデルのレビュー:
Exploreエージェントを使用します - Redis から Valkey への移行戦略の策定:
Planエージェントを使用します - テストを含むキャッシュレイヤー全体の実装:
Taskエージェントを使用します
dockerスキルが利用可能な場合は、Compose のネットワーク設定とマルチステージビルドのパターンを委任してください。performance-optimizerスキルが利用可能な場合は、アプリケーションレベルのキャッシュ戦略を委任してください。database-securityスキルが利用可能な場合は、ACL と TLS の設定レビューを委任してください。
参考資料
- データ構造とコマンド -- 文字列、ハッシュ、リスト、セット、ソート済みセット、ストリーム、HyperLogLog、ビットマップ、地理空間
- キャッシュパターン -- キャッシュアサイド、ライトスルー、TTL 戦略、エビクションポリシー、クライアント側キャッシュ、無効化
- 一般的なパターン -- レート制限、分散ロック、キュー、セッションストレージ、Pub/Sub、ストリーム、リーダーボード
- Docker とデプロイ -- Compose のセットアップ、永続化、レプリケーション、Sentinel、Cluster、セキュリティ、Redis からの移行