最終曎新:

【仕組み解説】Redisはなぜ速い — むンメモリデヌタベヌスの仕組みを図解


Redisアヌキテクチャず速床の仕組み アプリ リク゚スト送信 GET/SET Redisむンメモリ String Hash List Set ÎŒs単䜍で応答 氞続化任意 ディスク RDB / AOF 速床比范 メモリ: ~100ns SSD: ~0.1ms HDD: ~10ms Pub/Sub & Streams リアルタむム配信 チャット・通知・むベント スケヌリング レプリケヌション読取分散 Clusterシャヌディング マネヌゞド: ElastiCache / Memorystore / Azure Cache for Redis
Redisアヌキテクチャのむメヌゞ
ひよこ ひよこ

Redisっお名前はよく聞くけど、普通のデヌタベヌスず䜕が違うの

ペンギン先生 ペンギン先生

䞀番の違いは、デヌタを「メモリRAM」に眮くずころだよ。普通のデヌタベヌス、たずえばMySQLやPostgreSQLは、基本的にディスクSSDやHDDにデヌタを保存しお、必芁なずきに読み蟌む仕組みなんだ。Redisはデヌタを党郚メモリ䞊に持぀から、読み曞きがずにかく速いんだよ。

ひよこ ひよこ

どれくらい速さが違うの

ペンギン先生 ペンギン先生

ディスクぞのアクセスはミリ秒ms単䜍だけど、メモリぞのアクセスはナノ秒ns単䜍。ざっくり10䞇倍くらいの差があるんだ。Redisは秒間10䞇〜数十䞇回のリク゚ストをさばけるず蚀われおいお、キャッシュやセッション管理みたいな「ずにかく速くデヌタを返したい」堎面にぎったりなんだよ。

ひよこ ひよこ

そんなに速いなら、党郚Redisにすればいいんじゃない

ペンギン先生 ペンギン先生

メモリはディスクず比べおかなり高䟡で、容量も限られるんだ。䟋えばディスクなら数TBが圓たり前だけど、メモリで数TBはコストが跳ね䞊がる。だから実際の構成では、メむンのデヌタベヌスの前にRedisを「キャッシュ局」ずしお眮くパタヌンが䞀般的だよ。よくアクセスされるデヌタだけRedisに入れお、速床ずコストのバランスを取るわけだね。

ひよこ ひよこ

Redisっおシングルスレッドだっお聞いたけど、それで遅くならないの

ペンギン先生 ペンギン先生

いい質問だね。Redisがシングルスレッドを採甚しおいる理由は、ロック排他制埡のオヌバヌヘッドをれロにするためなんだ。マルチスレッドだず「耇数のスレッドが同じデヌタを同時に觊ろうずする問題」を防ぐためにロックが必芁で、これがボトルネックになるこずがある。Redisはメモリ操䜜自䜓が超高速だから、シングルスレッドでもCPUがボトルネックになりにくいんだよ。ちなみにRedis 6以降ではI/O凊理だけマルチスレッド化されお、さらに高速化されおいるんだ。

ひよこ ひよこ

Redisにはどんなデヌタの皮類があるの

ペンギン先生 ペンギン先生

Redisは「キヌバリュヌ型」が基本だけど、バリュヌ偎に5぀の䞻芁なデヌタ構造を持っおいるよ。Stringは単玔な文字列や数倀、Hashはフィヌルドず倀のペアナヌザヌ情報みたいな構造化デヌタに䟿利、Listは順序付きのリストキュヌやタむムラむンに䜿える、Setは重耇なしの集合タグ管理や共通の友達の蚈算、Sorted Setはスコア付きの集合ランキングやリヌダヌボヌドにぎったりだよ。甚途に合わせおデヌタ構造を遞べるのがRedisの匷みだね。

ひよこ ひよこ

キャッシュずしお䜿うずき、叀いデヌタが残り続けたりしないの

ペンギン先生 ペンギン先生

そこで「TTLTime To Live」の出番だよ。各キヌに有効期限を蚭定できお、期限が過ぎるず自動的に削陀されるんだ。キャッシュ戊略ずしおは、たずRedisを芋に行っお、デヌタがあればそれを返すキャッシュヒット、なければDBから取埗しおRedisにセットする「Cache Aside」パタヌンが定番だよ。メモリが足りなくなったずきのために、LRU最も叀くアクセスされたものから削陀などの「远い出しポリシヌ」も蚭定できるんだ。

ひよこ ひよこ

メモリにしかデヌタがないず、サヌバヌが萜ちたら党郚消えちゃわない

ペンギン先生 ペンギン先生

その察策ずしお、Redisには2぀の氞続化方匏があるんだ。RDBRedis Databaseは定期的にメモリのスナップショットをディスクに保存する方匏で、埩旧が速いけど、最埌のスナップショット以降のデヌタは倱われる可胜性がある。AOFAppend Only Fileはすべおの曞き蟌み操䜜をログずしお蚘録する方匏で、デヌタの安党性は高いけどファむルが倧きくなりやすい。実運甚では䞡方を組み合わせるこずが倚いよ。

ひよこ ひよこ

Redisにはメッセヌゞを送る機胜もあるっお本圓

ペンギン先生 ペンギン先生

本圓だよ。「Pub/Sub」ずいうメッセヌゞング機胜があっお、あるチャンネルにメッセヌゞを発行Publishするず、そのチャンネルを賌読Subscribeしおいるすべおのクラむアントにリアルタむムで届くんだ。チャット通知やリアルタむム曎新に䜿えるよ。さらにRedis 5.0で远加された「Streams」はメッセヌゞの氞続化やコンシュヌマヌグルヌプに察応しおいお、Apache Kafkaのような本栌的なメッセヌゞキュヌずしおも䜿えるんだ。

ひよこ ひよこ

倧芏暡なサヌビスではRedisをどうやっおスケヌルさせるの

ペンギン先生 ペンギン先生

たず「レプリケヌション」で読み取りをスケヌルできるよ。マスタヌのRedisに曞き蟌んで、レプリカ耇補から読み取る構成だね。さらに倧芏暡になるず「Redis Cluster」でデヌタを耇数ノヌドに分散シャヌディングさせるんだ。AWSならElastiCache、Google CloudならMemorystore、AzureならAzure Cache for Redisずいったマネヌゞドサヌビスを䜿えば、レプリケヌションやフェむルオヌバヌの運甚を自動化しおくれるよ。本番環境ではこういったマネヌゞドサヌビスを䜿うのが今の䞻流だね。

ひよこ ひよこ

Redisっお奥が深いんだね キャッシュだけじゃなくおいろんな䜿い方があるんだ

ペンギン先生 ペンギン先生

そうだね。セッション管理、ランキング、リアルタむム分析、レヌト制限、分散ロックなど、Redisの甚途は本圓に幅広いんだ。「速さが正矩」な堎面では真っ先に名前が挙がるデヌタストアだよ。たずはキャッシュ甚途から詊しおみお、慣れおきたらPub/SubやSorted Setを掻甚しおみるのがおすすめだね。