このレッスンですること
キーバリューストアは、名前(キー)をつけて値をしまっておき、その名前を言うと値を返してくれるものです。ウェブサイトでは、訪問者のセッションを覚えたり、ページの閲覧数を数えたりするのに使います。1ミリ秒よりずっと短い時間で答えてくれるからです。Valkey は無料のキーバリューストアで、Redis と同じコマンドが使えます。
値をしまって取り出し、値に有効期限をつけて、リスト、ハッシュ、カウンターに出会います。
始める前に
メモ
このレッスンの上のバーでラボを起動を押し、動き出したと表示されるまで待ってください。ストアは valkey というサービスで、ターミナルはその名前で呼び出します。下の実行ボタンは、コマンドをラボのターミナルに、同じセッションの中で順番に入力してくれます。入力の様子を見たり、自分でコマンドを打ったりするときは、バーのターミナルを開く(新しいタブ)を押します。
1. ストアにあいさつしよう
このターミナルには Valkey のクライアントがありません。そこで最初のコマンドで、ごく小さなクライアントを作ります。v という関数で、受け取った言葉を nc でポート 6379 のストアに送り、返ってきたものを表示します。この関数自身は何も表示しません。次に SET でキーに値をしまうと、ストアは +OK と答えます。GET で取り出すと、返事は $5(答えの長さ)で、次の行に hello と出ます。
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
v SET greeting helloここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
v GET greetingここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2. 値に有効期限をつけよう
EX 5 は「このキーは5秒だけ生きる」という意味です。自分のターミナルで v TTL code を打つと、急げば、残りが何秒かが出ます。2つめのコマンドは、6秒くらい待ってから実行してください。返事は $-1 で、これはストアの「そこには何もありません」という言い方です。ログインのセッションが時間切れになるのも、この仕組みです。
v SET code 1234 EX 5ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
v GET codeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3. リスト、ハッシュ、カウンター
RPUSH はリストの最後に追加して、今のリストの長さ :3 を返します。HSET はひとつのキーに名前つきの項目をしまいます。これがハッシュで、追加した数 :2 を返します。INCR は数に1を足して、新しい値 :1 を返します。もう一度押すと :2 です。1000人が同時に来ても、ちゃんと正確に数えられます。自分のターミナルで v LRANGE tasks 0 -1 を打つとリストを、v HGETALL user:1 を打つとハッシュを読み返せます。返事が : で始まるものは数、$ で始まるものは文字列です。
v RPUSH tasks wake eat codeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
v HSET user:1 name Ada born 1815ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
v INCR visitsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
4. 残るものを見よう
ラボのバーでラボを停止を押し、もう一度ラボを起動を押します。新しいターミナルは v を忘れているので、手順1の最初の実行をもう一度押して作り直し、次に v GET greeting の実行を押してください。hello のままで、code はとっくに期限切れです。Valkey は全部をメモリに置くので速く、書き込みのたびに、名前のついたボリューム(データの保存場所)のファイルに記録します。ボリュームはプラットフォームが保存してくれるので、起動したときにそのファイルからメモリを作り直せます。そんなファイルがないストアは、起動のたびに空っぽになってしまいます。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボは小さなサービスがひとつと、名前つきボリュームがひとつです。自動採点はありません。生徒は自分のセッションの返事、つまり有効期限つきのキーと TTL、リスト、ハッシュ、カウンターを提出し、期限切れで何が起きたか、停止と起動のあとで何が残ったかを一文で書きます。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。