Redisは、Luaスクリプトをどのように実行しますか。
RedisでLuaスクリプトを実行する方法は2つあります:evalコマンドとevalshaコマンドを使用する方法です。
- 評価命令:
EVAL スクリプト numkeys キー[キー…] 引数[引数…] - Luaスクリプト
- numkeys: スクリプトで使用されるキーの数
- キー[キー…]: スクリプトで使用される鍵
- arg [arg …]:スクリプトの引数
- 例えば、2つのキーの値を足し合わせて結果を返す簡単なLuaスクリプトを実行します。
- EVAL “return tonumber(redis.call(‘GET’, ARGV[1])) + tonumber(redis.call(‘GET’, ARGV[2]))” 2 key1 key2
- EVALSHAコマンド:
EVALSHA sha1 numkeys key [key …] arg [arg …] - Redisにすでに保存されているLuaスクリプトのSHA1ハッシュ値
- キーの数: スクリプトで使用されているキーの数
- キー[キー…]: スクリプトで使用されるキー
- arg [arg…]: スクリプトの引数
- Luaスクリプトをevalshaコマンドで実行すると、Redisは既に読み込んだスクリプトをキャッシュするため、性能が向上します。
- 最初に、LuaスクリプトをRedisにロードします。
- SCRIPT LOAD “return tonumber(redis.call(‘GET’, KEYS[1])) + tonumber(redis.call(‘GET’, KEYS[2]))”以下のように日本語に言い換えます:「SCRIPT LOAD “return tonumber(redis.call(‘GET’, KEYS[1])) + tonumber(redis.call(‘GET’, KEYS[2]))”」
- その後、ロードされたLuaスクリプトを実行します。
- EVALSHA c4d7c0a5e5cbd5c8bfcf3a7bd363df6de5866c07 2 キー1 キー2
ご注意ください。
- Luaスクリプトを実行する際には、eval命令やevalsha命令を使用して、Redisコマンドを呼び出すためにredis.call関数を使用することもできますし、redis.pcall関数を使用してRedisコマンドを呼び出すこともできます(エラー処理を含む)。
- KEYSとARGVはLuaスクリプト内のグローバル変数であり、スクリプトに渡されたキーと引数を取得することに使用できます。