【入門編】 EVALSHAコマンド – Redis

こんにちは。Redisの世界へようこそ。

Redisを使い始めると、最初は「データの保存と取り出し」というシンプルな操作が楽しくなりますよね。でも、少し慣れてくると「もっと効率的に、もっと素早く処理したい」という欲が出てくるはずです。

今日は、Redisの「職人技」とも言える`EVALSHA`というコマンドについてお話しします。難しそうな名前に見えますが、考え方はとてもシンプルです。一緒に紐解いていきましょう。

—

「毎回説明する」のは疲れませんか?

想像してみてください。あなたはカフェの店長です。お客さんが来るたびに、メニューの作り方を一から細かく説明していたら、日が暮れてしまいますよね。

そこであなたは、「一番人気の特製レシピ」に「No.1」という名前をつけて、厨房の壁に貼っておくことにしました。

  • お客さん: 「No.1のやつ作って!」
  • あなた: (レシピを見なくても、壁の「No.1」を見てすぐに調理開始!)

これなら、レシピを口頭で伝える手間が省けて、提供スピードが劇的に上がります。
実は、`EVALSHA`はこれと全く同じことをRedisで行っているのです。

Luaスクリプトと「おまじない」の正体

Redisには、複数のコマンドをまとめて実行できる「Lua(ルア)スクリプト」という機能があります。

通常、このスクリプトをRedisに送ると、Redisは「なるほど、こういう手順で処理すればいいんだな」と毎回中身を解釈します。でも、スクリプトが長ければ長いほど、そのデータを送る通信量が増えてしまい、もったいないですよね。

そこで登場するのが、`SCRIPT LOAD`と`EVALSHA`です。

1. `SCRIPT LOAD`: 「このレシピをサーバーに保存してくれ」と頼む。すると、Redisは「わかった、そのレシピの指紋(ハッシュ値)は『a1b2c3…』だね」と教えてくれます。
2. `EVALSHA`: 「さっきの『a1b2c3…』のレシピを実行して!」と頼む。

たったこれだけで、長いスクリプトを何度も送る必要がなくなるのです。

—

実際にやってみよう

言葉だけではイメージしづらいと思うので、例を見てみましょう。

1. レシピを登録する

まず、一度だけスクリプトを送信して、サーバーに覚え込ませます。

「キーの値を2倍にする」という簡単な処理を登録
SCRIPT LOAD “return redis.call(‘get’, KEYS[1]) 2”

実行結果:サーバーから「b7e3…」のようなハッシュ値が返ってきます
これが「No.1」という名前の代わりです

2. ハッシュ値を使って実行する

次からは、長い処理の内容を書く必要はありません。

ハッシュ値を指定して実行(KEYS[1]に’mykey’を渡す)
EVALSHA b7e3… 1 mykey

これだけで、Redisは内部のレシピを呼び出して高速に処理します!

—

なぜこれが「伝説級」の知見なのか?

初心者のうちは「別に普通にコマンドを送ればいいのでは?」と思うかもしれません。しかし、大規模なシステムになればなるほど、この差は決定的になります。

  • 通信のダイエット: ネットワークを行き来するデータ量が減れば、それだけシステムは軽快になります。
  • サーバーの負荷軽減: サーバー側で「今から何をするか」を解析するコストが省けます。
  • 原子性(アトミック): Luaスクリプトとして実行することで、途中で他の処理に割り込まれることなく、最後まで一気に処理が完了します。これはRedisにおける「最強の安全策」です。

ここをクリアすれば、Redisはあなたの武器になる

`EVALSHA`を使いこなせるようになると、あなたは単なる「利用者」から「Redisのパフォーマンスを最大限引き出すエンジニア」へと一歩進化します。

「何を送るか」ではなく「どう効率的に伝えるか」。この視点を持てるようになったら、Redisの基本はもうバッチリマスターしたと言っていいでしょう。

最初は難しく感じるかもしれませんが、まずは小さなスクリプトを一つ登録して、`EVALSHA`で呼び出すところから始めてみてください。「おっ、速いぞ」と実感できる瞬間が必ず訪れます。

何か詰まったら、いつでも聞きに来てくださいね。応援しています!

コメント

タイトルとURLをコピーしました