Redis
GitHub概要
redis/node-redis
Redis Node.js client
スター17,246
ウォッチ294
フォーク1,908
作成日:2010年9月14日
言語:TypeScript
ライセンス:MIT License
トピックス
node-redisnodejsredisredis-clientredis-cluster
スター履歴
データ取得日時: 2025/7/18 05:46
ライブラリ
Redis
概要
Redisは「REmote DIctionary Server」の略で、高性能インメモリデータ構造ストアです。キャッシュ、データベース、メッセージブローカーとして多用途に使用でき、サブミリ秒のレスポンス時間、豊富なデータ構造、水平スケーリング、パブリッシュ/サブスクライブ機能を提供します。2025年現在、分散キャッシュソリューションの絶対的標準として地位を確立し、AWS、Azure、GCPなど全クラウドプロバイダーでマネージドサービスが提供されています。
詳細
Redis 8.0が2025年春にリリースされ、AI特化機能を大幅強化しました。Redis LangCache(LLMアプリ向けセマンティックキャッシュサービス)、Vector Sets(ベクトル埋め込み用新データ型)、LangGraphとのネイティブ統合を追加。RSALv2/SSPLライセンスに加えAGPLのトリプルライセンス体制を採用。20以上のデータ型をサポートし、文字列、リスト、セット、ソート済みセット、ハッシュ、ストリームなど多様なデータ構造を効率的に処理。Auto Tiering with Flashにより、アクセス頻度の低いデータをフラッシュストレージに自動的に移動し、メモリ効率を大幅改善。
主な特徴
- サブミリ秒レスポンス: メモリベースアクセスによる極めて高速な読み書き性能
- 豊富なデータ構造: 20以上のデータ型による柔軟なデータモデリング
- 分散アーキテクチャ: シャーディング、クラスタリング、レプリケーション対応
- パブリッシュ/サブスクライブ: リアルタイムメッセージング機能
- 永続化オプション: RDBスナップショット、AOFログによるデータ保護
- AI/ML統合: Vector Sets、セマンティックキャッシュ、LangGraph連携
メリット・デメリット
メリット
- 分散キャッシュにおける圧倒的な実績と信頼性(10年以上の運用歴)
- 全クラウドプロバイダーでマネージドサービス利用可能
- 豊富なクライアントライブラリ(Python、Java、Node.js、C#等)
- リアルタイムアプリケーション、Edge Computing対応
- 高可用性とフェイルオーバー機能による堅牢性
- オープンソースによる透明性とコミュニティサポート
デメリット
- シングルスレッド設計による大量同時接続時のボトルネック
- メモリ使用量がデータサイズに比例(コスト考慮要)
- 複雑な設定とチューニングが必要(エンタープライズ環境)
- ライセンス変更による商用利用の制約
- 学習コストが高い(多機能ゆえの複雑さ)
- データ型の適切な選択による性能最適化の必要性
参考ページ
書き方の例
インストールとセットアップ
# Docker での起動
docker run --name redis-cache -p 6379:6379 -d redis:8.0
# Redis CLI での接続確認
redis-cli ping
# PONG
# Ubuntu/Debian でのインストール
sudo apt update
sudo apt install redis-server
# CentOS/RHEL でのインストール
sudo yum install epel-release
sudo yum install redis
基本的なキャッシュ操作
# 基本的な文字列操作
SET user:1:name "太郎"
GET user:1:name
# "太郎"
# TTL(有効期限)付きキャッシュ
SETEX session:abc123 3600 "user_data"
TTL session:abc123
# 3599
# 複数キーの一括操作
MSET user:1:email "[email protected]" user:1:age "25"
MGET user:1:name user:1:email user:1:age
# 1) "太郎"
# 2) "[email protected]"
# 3) "25"
# キー存在確認と削除
EXISTS user:1:name
# 1
DEL user:1:name
EXISTS user:1:name
# 0
ハッシュによるオブジェクトキャッシュ
# ユーザー情報をハッシュで格納
HMSET user:2 name "花子" email "[email protected]" age 28 status "active"
HGET user:2 name
# "花子"
# ハッシュの一部フィールド更新
HSET user:2 last_login "2025-06-21 10:30:00"
HINCRBY user:2 login_count 1
# ハッシュ全体取得
HGETALL user:2
# 1) "name"
# 2) "花子"
# 3) "email"
# 4) "[email protected]"
# 5) "age"
# 6) "28"
# 7) "status"
# 8) "active"
# 9) "last_login"
# 10) "2025-06-21 10:30:00"
# 11) "login_count"
# 12) "1"
# ハッシュフィールド削除
HDEL user:2 status
リストによるキューとスタック
# キューとしての使用(FIFO)
LPUSH task_queue "process_payment"
LPUSH task_queue "send_email"
LPUSH task_queue "update_inventory"
# キューからタスク取り出し
RPOP task_queue
# "process_payment"
# スタックとしての使用(LIFO)
LPUSH recent_items "item3"
LPUSH recent_items "item2"
LPUSH recent_items "item1"
LPOP recent_items
# "item1"
# ブロッキングPOP(タスクキューで有用)
BLPOP task_queue 0 # 無限待機
セットによる一意性管理
# ユーザーのタグ管理
SADD user:1:tags "developer" "python" "redis"
SADD user:2:tags "designer" "photoshop" "redis"
# 共通タグ検索
SINTER user:1:tags user:2:tags
# 1) "redis"
# 全タグ取得
SMEMBERS user:1:tags
# 1) "developer"
# 2) "python"
# 3) "redis"
# タグ存在確認
SISMEMBER user:1:tags "python"
# 1
# オンラインユーザー管理
SADD online_users "user:1" "user:2" "user:3"
SCARD online_users
# 3
ソート済みセットによるランキング
# スコアボード作成
ZADD leaderboard 1500 "player1"
ZADD leaderboard 2100 "player2"
ZADD leaderboard 1800 "player3"
# ランキング表示(降順)
ZREVRANGE leaderboard 0 2 WITHSCORES
# 1) "player2"
# 2) "2100"
# 3) "player3"
# 4) "1800"
# 5) "player1"
# 6) "1500"
# スコア範囲検索
ZRANGEBYSCORE leaderboard 1600 2000
# 1) "player3"
# 順位取得
ZREVRANK leaderboard "player2"
# 0
パブリッシュ/サブスクライブ
# 端末1: サブスクライバー
SUBSCRIBE notifications user_alerts
# Reading messages...
# 端末2: パブリッシャー
PUBLISH notifications "システムメンテナンス開始"
# (integer) 1
PUBLISH user_alerts "新しいメッセージがあります"
# (integer) 1
# パターンマッチング購読
PSUBSCRIBE user:*:notifications
PUBLISH user:123:notifications "個人通知"
Redisクラスターとスケーリング
# クラスター情報確認
CLUSTER INFO
CLUSTER NODES
# シャーディング用ハッシュタグ
SET user:{1000}:profile "profile_data"
SET user:{1000}:preferences "pref_data"
# 同じハッシュスロットに配置される
# レプリケーション設定
# redis.conf
# replicaof 192.168.1.100 6379
# フェイルオーバー確認
INFO replication