Redisは、Luaスクリプトをどのように実行しますか。

RedisでLuaスクリプトを実行する方法は2つあります:evalコマンドとevalshaコマンドを使用する方法です。

  1. 評価命令:
    EVAL スクリプト numkeys キー[キー…] 引数[引数…]
  2. Luaスクリプト
  3. numkeys: スクリプトで使用されるキーの数
  4. キー[キー…]: スクリプトで使用される鍵
  5. arg [arg …]:スクリプトの引数
  6. 例えば、2つのキーの値を足し合わせて結果を返す簡単なLuaスクリプトを実行します。
  7. EVAL “return tonumber(redis.call(‘GET’, ARGV[1])) + tonumber(redis.call(‘GET’, ARGV[2]))” 2 key1 key2
  8. EVALSHAコマンド:
    EVALSHA sha1 numkeys key [key …] arg [arg …]
  9. Redisにすでに保存されているLuaスクリプトのSHA1ハッシュ値
  10. キーの数: スクリプトで使用されているキーの数
  11. キー[キー…]: スクリプトで使用されるキー
  12. arg [arg…]: スクリプトの引数
  13. Luaスクリプトをevalshaコマンドで実行すると、Redisは既に読み込んだスクリプトをキャッシュするため、性能が向上します。
  14. 最初に、LuaスクリプトをRedisにロードします。
  15. 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]))”」
  16. その後、ロードされたLuaスクリプトを実行します。
  17. EVALSHA c4d7c0a5e5cbd5c8bfcf3a7bd363df6de5866c07 2 キー1 キー2

ご注意ください。

  1. Luaスクリプトを実行する際には、eval命令やevalsha命令を使用して、Redisコマンドを呼び出すためにredis.call関数を使用することもできますし、redis.pcall関数を使用してRedisコマンドを呼び出すこともできます(エラー処理を含む)。
  2. KEYSとARGVはLuaスクリプト内のグローバル変数であり、スクリプトに渡されたキーと引数を取得することに使用できます。
bannerAds