Redis: Redis チュートリアル ホーム
Redisはオープンソースのインメモリキーバリューストアで、データベース、キャッシュ、メッセージブローカーとして使用できます。複数のデータ構造をサポートし、非常に高いパフォーマンスを提供するため、現代のWebアプリケーションに欠かせないコンポーネントです。
1. Redisとは
Redisは REmote DIctionary Server の略で、2009年にSalvatore Sanfilippoによって開発されました。データをメモリに保存するため、毎秒10万件以上の操作を処理できる高速な読み書き速度を実現しています。
(1) Redisのコア機能
| 機能 | 説明 |
|---|---|
| インメモリストレージ | データをメモリに保存し、非常に高速な読み書きを実現 |
| 永続化 | RDBスナップショットとAOFログをサポート |
| 豊富なデータ型 | String、Hash、List、Set、Sorted Setなどをサポート |
| アトミック操作 | すべての操作がアトミックで、トランザクションをサポート |
| Pub/Sub | 組み込みのパブリッシュ/サブスクライブメッセージングシステム |
| 高性能 | シングルインスタンスのQPSが10万を超え、マスターレプリカレプリケーションとクラスターをサポート |
💡 なぜRedisと呼ばれるのですか? Redis = REmote DIctionary Server、つまりリモートからアクセス可能な辞書(キーバリュー)サービスだからです。
2. Redisでできること
(1) キャッシュシステム
これは最も一般的なユースケースです。データベースのクエリ結果、APIレスポンス、ページフラグメントなどをRedisに保存し、アプリケーションのパフォーマンスを大幅に向上させます。
TEXT
📖 参照専用
ユーザーリクエスト → Redisキャッシュを確認 → ヒット → 返却
↓ ミス
データベースに問い合わせ → Redisに保存 → 返却
(2) セッションストレージ
ユーザーのログイン状態、ショッピングカート、一時データなどをRedisに保存し、分散環境でのセッション共有をサポートします。
(3) メッセージキュー
RedisのListとPub/Subを使用して、軽量なメッセージキューを実装します。
(4) ランキング
Sorted Setのソート機能を活用して、ゲームのリーダーボードやトレンドリストなどに使用します。
(5) カウンター
StringのINCRコマンドを使用して、記事のビュー数、いいね数、アクセス統計などを実現します。
(6) ソーシャル機能
Setの積集合と和集合の操作を使用して、相互フォロー、知り合いかもしれませんなどのソーシャル機能を実装します。
3. Redisと他のデータベースの比較
(1) Redis vs Memcached
| 項目 | Redis | Memcached |
|---|---|---|
| データ型 | 豊富(5つの基本型) | Stringのみ |
| 永続化 | サポート | 非サポート |
| クラスタリング | ネイティブサポート | クライアント側シャーディングが必要 |
| メモリ管理 | より柔軟 | よりシンプル |
| パフォーマンス | 非常に高い | 非常に高い |
⚠️ 注意:選び方のポイント 単純なキーバリューキャッシュのみが必要な場合はMemcachedで十分です。複雑なデータ構造、永続化、クラスタリングが必要な場合はRedisを選びましょう。
(2) Redis vs リレーショナルデータベース(MySQL)
| 項目 | Redis | MySQL |
|---|---|---|
| ストレージ | メモリ | ディスク |
| データモデル | キーバリュー | リレーショナルテーブル |
| クエリ能力 | シンプル | 強力(SQL) |
| トランザクションサポート | シンプルなトランザクション | 完全なACID |
| パフォーマンス | 非常に高い | 高い |
| 永続化 | オプション | デフォルト |
💡 ベストプラクティス: Redis + MySQL を併用することをおすすめします。Redisはキャッシュとホットデータ用、MySQLは永続ストレージ用です。
(3) Redis vs MongoDB
| 項目 | Redis | MongoDB |
|---|---|---|
| データモデル | キーバリュー | ドキュメント(JSON) |
| クエリ言語 | コマンドベース | SQLライク |
| メモリ使用 | すべてインメモリ | メモリ+ディスク |
| ユースケース | キャッシュ、セッション、キュー | ドキュメントストレージ、コンテンツ管理 |
4. Redisのユースケース
(1) 主要インターネット企業での利用
- Weibo:ユーザー関係、メッセージキュー、トレンドトピックの保存
- Taobao:商品キャッシュ、ショッピングカート、フラッシュセールシステム
- WeChat:セッションメッセージ、モーメンズのいいね
- GitHub:キャッシュ、キュー、カウンター
(2) 代表的なアプリケーションシナリオ
| シナリオ | 使用するデータ型 | 説明 |
|---|---|---|
| キャッシュ | String | 有効期限付きでキャッシュデータを保存 |
| セッションストレージ | String | ユーザーセッション情報を保存 |
| ショッピングカート | Hash | 商品IDと数量を保存 |
| メッセージキュー | List | LPUSH/RPOPでキューイング |
| リーダーボード | Sorted Set | 自動ソート、リアルタイム更新 |
| ソーシャル関係 | Set | フレンドリスト、積集合計算 |
| カウンター | String | INCRでアトミック加算 |
| レート制限 | String + TTL | アクセス回数の追跡 |
5. Redisのバージョン履歴
| バージョン | リリース日 | 主な機能 |
|---|---|---|
| 1.0 | 2009年 | 初回リリース |
| 2.0 | 2010年 | 仮想メモリ、Pub/Sub |
| 2.6 | 2012年 | Luaスクリプト、有効期限の精度向上 |
| 2.8 | 2013年 | 部分同期、設定の書き換え |
| 3.0 | 2015年 | 公式クラスターサポート |
| 3.2 | 2016年 | GEO、ビットマップ最適化 |
| 4.0 | 2017年 | モジュールシステム、ハイブリッド永続化 |
| 5.0 | 2018年 | Streamsデータ型 |
| 6.0 | 2020年 | ACLアクセス制御、マルチスレッドI/O |
| 7.0 | 2022年 | Functions、マルチパートAOF |
💡 推奨バージョン: より良いパフォーマンスと機能を得るために、Redis 6.0以降を使用することをおすすめします。
6. このチュートリアルの対象者
- バックエンド開発者:Redisを学んでアプリケーションのパフォーマンスを向上させたい方
- DevOpsエンジニア:Redisのデプロイと最適化を習得したい方
- アーキテクト:システムアーキテクチャにおけるRedisを理解したい方
- 学生:現代のデータベース技術を学びたい方
7. 前提知識
- Linuxコマンドの基本的な知識
- 少なくとも1つのプログラミング言語(Python、Java、Node.jsなど)に精通していること
- データベースの基本的な概念の理解
8. チュートリアルの内容
このチュートリアルは4つのパートに分かれています:
- Redisの基礎:インストール、設定、基本操作
- データ型の詳細:String、Hash、List、Set、Sorted Set
- 高度な機能:トランザクション、永続化、セキュリティ、パフォーマンス最適化
- 実践的な応用:Python、Java、Node.jsでのRedisの使用
▶ サンプル
基本的な接続と操作:
BASH
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> GET mykey
"Hello"
❓ よくある質問
Q Redisはデータをメモリに保存しますが、停電時にデータは失われますか?
A Redisは永続化をサポートしており、メモリ内のデータをディスクに保存できます。RDBスナップショット、AOFログ、またはその両方を使用できます。
Q Redisはどのくらいのデータを保存できますか?
A 使用可能なメモリに依存します。単一のRedisインスタンスで数GBのデータを保存でき、クラスタリングによりTBレベルまで拡張できます。
Q Redisはシングルスレッドですか?
A Redisのコアコマンド実行はシングルスレッドですが、バージョン6.0ではネットワークの読み書きにマルチスレッドI/Oが導入されました。シングルスレッド設計によりロック競合を回避し、実際にパフォーマンスが向上しています。
Q Redisと従来のデータベースの違いは何ですか?
A Redisはデータをメモリに保存するNoSQLデータベースで、キャッシュやホットデータに最適です。従来のデータベースはデータをディスクに保存して永続ストレージを提供します。通常、これらは併用されます。
📖 まとめ
- Redisは高性能で豊富なデータ型を持つインメモリキーバリューデータベースです
- キャッシュ、セッションストレージ、メッセージキュー、リーダーボードなどによく使用されます
- Memcachedと比較して、Redisはより多くのデータ型と永続化をサポートします
- MySQLと比較して、Redisは高速ですが複雑なクエリには適していません
- 推奨バージョン:Redis 6.0以降
📝 練習問題
- 考えてみよう:あなたのプロジェクトでは、どのようなシナリオがRedisに適していますか?
- 調査してみよう:普段利用しているWebサイトやアプリで、Redisが何に使われている可能性があるか考えてみましょう。
- 比較してみよう:RedisとMemcachedのメリットとデメリットは何ですか?どのように選びますか?
9. 次のレッスン
次のレッスンでは、Redisのインストールについて学びます。Linux、Windows、Macでのインストール方法を解説します。