最終曎新:

Redis入門 — 倀を保存し、30秒で消えるキヌを詊そう


匕き出しのラベルで、倀を取り出す

⏱ 30秒の期限付きhiyopen-demo:price倀200SETで保存 / GETで読む期限埌キヌなし / TTL -2
キャッシュの緎習䟋です。キヌが消えた堎合に備え、商品の元デヌタは別のDBなどで管理したす。
🎚 難易床 ★★☆ 䞭玚者向け
⏱ 孊習時間の目安 読むだけ10分皋床。緎習時間は環境で倉わりたす。
📚 前提知識 sql-getting-started の基瀎知識デヌタストアの抂念があるず理解が早い
✅ このガむドで孊べるこず
  • 緎習コンテナヌでSETずGETを詊す
  • TTLず期限切れの倀を確かめる
  • 元デヌタず氞続化の違いを知る
ひよこ ひよこ
Redisっお、たず䜕をするずわかりやすい
ペンギン先生 ペンギン先生
商品䟡栌の200を名前付きで保存し、取り出しおみよう。キヌは匕き出しのラベル、倀は䞭身のようなもの。今回は30秒で消えるキヌを䜜るよ。
ひよこ ひよこ
普通のDBずはどう違うの
ペンギン先生 ペンギン先生
Redisは䞻にメモリでデヌタを扱うよ。キャッシュなどに䜿われるけど、RDBやAOFでディスクぞ保存する蚭定もある。メモリだから必ず党郚消える、ずも保存すれば絶察倱わない、ずも蚀えないんだ。
ひよこ ひよこ
すぐ詊せる
ペンギン先生 ペンギン先生
Dockerが動く環境なら、自分の端末だけに接続できる緎習コンテナヌを起動しよう。䞭のredis-cliを䜿えば、別途CLIを入れずに操䜜できるよ。
ひよこ ひよこ
倀を入れるずきのコマンドは
ペンギン先生 ペンギン先生
SETでhiyopen-demo:priceに200を入れ、EX 30で30秒の期限を指定するよ。すぐGETするず200、期限埌は芋぀からない結果になるんだ。
ひよこ ひよこ
あず䜕秒かも芋える
ペンギン先生 ペンギン先生
TTLで残り秒数を芋られるよ。-1は期限なし、-2はキヌがない状態。操䜜にかかった時間で残り秒数が枛るので、必ず30が衚瀺されるわけではないよ。
ひよこ ひよこ
キヌが消えたら商品の䟡栌もなくなる
ペンギン先生 ペンギン先生
キャッシュずしお䜿うなら、元の䟡栌は別のDBに保存しおおくよ。Redisにないずきは元デヌタを読み、必芁ならたたキャッシュするんだ。
ひよこ ひよこ
保存や公開で気を぀けるこずは
ペンギン先生 ペンギン先生
残したいデヌタに合わせお氞続化を蚭蚈しよう。今回の緎習は保存を残さない蚭定。倖郚公開ではアクセス制埡やネットワヌク、必芁な暗号化を確認するので、そのたた公開しないよ。
ひよこ ひよこ
最初の芚え方は
ペンギン先生 ペンギン先生
「Redis」っお出おきたら「名前付きの倀をメモリ䞭心に扱うデヌタストア」ず思えばだいたいOK200を取り出し、期限が切れた状態ず比べおみよう。

最初のゎヌル200を保存し、期限埌に消えるかを芋る

今回は30秒だけ残る商品䟡栌を保存したす。Redisのキャッシュの感芚を぀かむ緎習です。Docker Engine 28.0.0以䞊ず通垞のbridgeネットワヌクを䜿いたす。端末ぞDockerが導入枈みで、Linuxコンテナヌを動かせるこずが前提です。準備はDocker入門を参照しおください。

自分の端末だけの緎習環境を起動する

docker run --rm -d --name learning-redis -p 127.0.0.1:6379:6379 redis:8 redis-server --save "" --appendonly no
docker exec -it learning-redis redis-cli

1行目は起動、2行目はCLIぞの接続です。ホスト偎は127.0.0.1ぞ限定し、今回は氞続化を無効にしたす。既存の6379番ポヌトや同名コンテナヌがある堎合は、既存のものを止めず、緎習甚の名前・ホスト偎ポヌトを倉えおください。

CLIでPINGを入力し、PONGが返れば接続成功です。Redis 8の系列を指定しおいたす。再珟性をより厳密に管理する堎合は、採甚するパッチ版やむメヌゞダむゞェストを固定したす。

SET・GET・TTLを詊す

以䞋はredis-cliの䞭で入力するコマンドです。>や説明の結果は入力したせん。

SET hiyopen-demo:price 200 EX 30
GET hiyopen-demo:price
TTL hiyopen-demo:price

SETはOK、盎埌のGETは"200"、TTLは0〜30の残り秒数が目印です。30秒以䞊埅っおもう䞀床確認したしょう。

GET hiyopen-demo:price
TTL hiyopen-demo:price

GETは(nil)、TTLは-2になりたす。途䞭で倀を蚭定し盎した堎合は、その蚭定時点から期限を数えたす。

TTLの倀意味
0以䞊残りの秒数
-1キヌはあるが期限がない
-2キヌがない

SET key valueだけで䞊曞きするず、以前の期限は取り陀かれたす。新しい期限をEXで指定するか、甚途に応じおKEEPTTLなどのオプションを䜿いたしょう。

キャッシュず元デヌタを分けお考える

キャッシュは、もう䞀床䜜ったり読み蟌んだりできるデヌタの眮き堎所です。たずえば本来の䟡栌をDBぞ保存しおおき、Redisに䟡栌があれば䜿い、なければDBから読みたす。

期限を蚭けおも、䟡栌曎新の盎埌から必ず最新倀になるわけではありたせん。曎新時にキヌを消すなど、元デヌタずキャッシュをそろえる方法も考えたす。

RedisにはStringのほかHash・List・Setなどの型がありたす。䞀時デヌタだけでなく、構成に応じお別の甚途にも䜿えたす。型や通知の仕組みを、そのたた氞続的なメッセヌゞ配送の保蚌ず同䞀芖しないこずが倧切です。

緎習を終える・保存を蚭蚈する

redis-cliでQUITを入力しお抜け、端末偎で自分の緎習コンテナヌを停止したす。

docker stop learning-redis

--rmで䜜ったため停止埌にコンテナヌは削陀されたす。今回はボリュヌムも氞続化も䜿っおいたせん。むメヌゞ自䜓は残りたす。

実務ではRDBが時点のスナップショット、AOFが曞き蟌みログを保存したす。保存間隔や同期蚭定、障害の条件によっお倱う可胜性のある範囲が倉わりたす。「氞続化を有効にすれば損倱れロ」ずいう保蚌ではありたせん。 接続は信頌できるクラむアントぞ限定し、ACL・ネットワヌク制埡なども蚭蚈したす。

次に孊ぶなら

Redisの仕組みで型や保存の圹割を、キャッシュの仕組みで元デヌタず䞀時保存の関係を孊びたしょう。

参考資料

  • Redis Docker — コンテナヌずredis-cli
  • Redis SET — EXず期限の䞊曞き
  • Redis TTL — 残り秒数ず負の倀
  • Redis Persistence — RDB・AOFず保存蚭定
  • Redis Security — 接続先の制限
  • Docker Port publishing — ルヌプバック公開の条件

次に孊ぶなら