PythonによるRedis操作と実践的な応用例

Redisのインストール

WindowsやLinux環境のインストール手順はネット上に多数公開されています。環境に合わせて適切なガイドを参照してください。

redis-pyのインストール

pip install redis

Redisの可視化ツール

RedisDesktopManagerを使用できます。ダウンロード先: https://redisdesktop.com/download

APIの基本操作

redis-pyのAPIは主に以下のカテゴリに分類されます:

  • 接続方法
  • データ操作(String/Hash/List/Set/Sorted Set)
  • パイプライン
  • Publish-Subscribe

接続方法

接続クラスの選択

redis-pyではStrictRedisが公式コマンドをサポートし、Redisは後方互換性のために存在します。公式推奨はStrictRedisです。

<pre>import redis conn = redis.StrictRedis(host='localhost', port=6379, db=0) conn.set('user_profile', 'sample_data') print(conn.get('user_profile'))</pre>

接続プールの利用

接続プールを介して複数のRedisインスタンスが同一接続を共有できます。

<pre>import redis conn_pool = redis.ConnectionPool(host='localhost', port=6379, db=0) conn = redis.StrictRedis(connection_pool=conn_pool) conn.set('user_id', '12345') print(conn.get('user_id'))</pre>

実用的な応用例

キャッシュ管理

オブジェクトをシリアライズしてString型で保存します。注意点:

  • キー名は重複しないようにし、短く(例: user:1001
  • シリアライズ方式は効率性とメモリ効率を考慮
  • データベースとの整合性維持: 更新時/削除時にキャッシュを無効化

メッセージキュー

List型のlpushrpopでメッセージを処理。順序保証と優先度対応にはSorted Setを利用。

タイムライン実装

最新投稿をlpushで追加し、lrangeで取得:

conn.lpush('timeline:feed', 'post_123')

リーダーボード

Sorted Setのzrevrangebyscoreでスコア順のリストを取得:

conn.zrevrangebyscore('leaderboard', '+inf', '-inf', withscores=True)

カウンター実装

日次登録数カウンター(String型):

conn.setex('daily_registrations', 86400, 0)

投稿のいいね数(Hash型):

conn.hincrby('post:789', 'likes', 1)

友達関係管理

互いにフォローしているユーザーを取得:

conn.sinter('user:123:follows', 'user:456:follows')

分散ロック

ロック取得例(1秒有効):

lock_result = conn.set('app_lock', 'locked', ex=1, nx=True)

ロック解放はconn.delete('app_lock')で行います。

倒置インデックス

都市名の部分一致検索用インデックス:

conn.sadd('index:beijing', '1001')

検索時はconn.smembers('index:be')でIDを取得

タグ: redis Python distributed-lock cache leaderboard

6月24日 17:48 投稿