Redis
https://gyazo.com/00594cfa8f077d2ac621d29378d96f71
REmote DIctionary Service
KVS
開発者
Salvatore Sanfilippo
website
github
#wip
gpt-5.icon
Redis(レディス)は、オープンソースのインメモリデータストアで、キャッシュ・セッション管理・ランキング・Pub/Sub・キュー処理などに幅広く使われています。以下で、仕組みと特徴を整理して解説します。
🔹 基本概要
正式名称: Remote Dictionary Server
開発言語: C
特徴: 「キーと値」でデータを扱う NoSQL データベース
主な用途: キャッシュ、キュー、セッション、ランキング、リアルタイム分析 など
Redis はデータを メモリ上(RAM) に保持するため、非常に高速です(ミリ秒未満の応答が可能)。
一方で、永続化機能(ディスク保存)も備えており、キャッシュ用途だけでなく、永続データストアとしても使えます。
🔹 データ構造(Key-Value の「Value」部分)
Redis の特徴は、単なる文字列以外にも 多様なデータ型をサポートしている点です。
table:_
型名 概要 主な用途
String 最も基本的な型 キャッシュ、トークンなど
List 順序付きの文字列リスト(両端操作可能) キュー、ログバッファ
Set 重複のない集合 タグ、ユニークユーザー管理
Sorted Set スコア付き集合 ランキング、スコアボード
Hash フィールドと値のペア オブジェクト、ユーザー情報
Stream 時系列データ イベントログ、メッセージキュー
Bitmap, HyperLogLog ビット演算や概算カウント用 大規模データの統計など
🔹 主な機能
1. キャッシュとしての利用
Webアプリで頻繁にアクセスされるデータを Redis にキャッシュし、DBアクセスを削減。
例:GET user:123 → キャッシュ命中
TTL(有効期限)を設定可能 → SET key value EX 60(60秒後に削除)
2. Pub/Sub(メッセージ配信)
リアルタイム通知などに利用される Publish/Subscribe モデルをサポート。
code:bash
SUBSCRIBE news
PUBLISH news "Hello world!"
3. 永続化(Persistence)
メモリ上のデータをディスクに保存する仕組みがあり、サーバ再起動後も復元可能。
RDB(スナップショット方式)
AOF(コマンドログ方式)
ハイブリッド方式も可能
4. 高可用性(HA)・スケーリング
Redis Sentinel: フェイルオーバーを自動化
Redis Cluster: シャーディングで水平分割し、スケールアウト対応
🔹 パフォーマンスの理由
すべてのデータを RAM に格納
シングルスレッドで動作(内部ロックが不要で高速)
ノンブロッキングI/O(event loopによる効率的な処理)
🔹 よくある利用パターン
table:_
利用目的 説明
セッションストア Webログインセッションを保存
キャッシュ RDBやAPIの結果をキャッシュ
レートリミット API呼び出し回数の制御
キュー 非同期タスクやイベント処理
ランキング Sorted Set を利用したスコア管理
分散ロック SETNX を用いた簡易ロック実装
例
code:py
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# データを保存
r.set('user:1', 'Alice')
# 取得
print(r.get('user:1')) # b'Alice'
# 有効期限付き(60秒)
r.set('token:123', 'xyz', ex=60)
🔹 Redis のメリットとデメリット
メリット
高速・低レイテンシ
データ構造が豊富
永続化やレプリケーションも可能
簡単なセットアップ
デメリット
メモリ使用量が多い(RAM依存)
巨大データにはコスト高
デフォルトはシングルスレッド
トランザクション機能は限定的
mini-redis
https://github.com/tokio-rs/mini-redis
https://architecturenotes.co/redis/
図解
https://redis.io/docs/stack/search/reference/vectors/
Vector Search Engine的なこと出来るんだmrsekut.icon
『Redis実践入門』
https://medium.com/@hayashier/redis-54a36d0f10cd