Redisをキャッシュとして活用する方法
Redisはインメモリのキーバリューストアで、高速なデータアクセスが特徴です。 データベースへの負荷軽減、セッション管理、ランキング処理など多様な用途で使われます。
基本コマンド
# 文字列の保存と取得
SET user:1:name "田中太郎"
GET user:1:name
# 有効期限付きで保存(TTL: 3600秒)
SETEX session:abc123 3600 '{"userId":1}'
# インクリメント(カウンター)
INCR page:views:article-01
キャッシュパターン(Cache-Aside)
import redis
import json
r = redis.Redis(host='localhost', port=6379, db=0)
def get_user(user_id: int):
cache_key = f"user:{user_id}"
cached = r.get(cache_key)
if cached:
return json.loads(cached)
# キャッシュミス → DBから取得
user = db.query(User).get(user_id)
r.setex(cache_key, 3600, json.dumps(user.to_dict()))
return user.to_dict()
リスト型でキューを実装
# ジョブをエンキュー
LPUSH job_queue '{"type":"email","to":"user@example.com"}'
# デキュー(ブロッキング)
BRPOP job_queue 0
Sorted Setでランキング
# スコアを更新
ZADD ranking 1500 "user:1"
ZADD ranking 2300 "user:2"
# 上位3件を取得
ZREVRANGE ranking 0 2 WITHSCORES
まとめ
Redisは適切なTTL設定とキャッシュ無効化戦略が重要です。 データの整合性が必要な箇所には使わず、読み取りが多い重いクエリの結果キャッシュから始めるのがおすすめです。