0Pricing
Lua Academy · レッスン

SCRIPT LOADとEVALSHA

SCRIPT LOADでスクリプトを読み込み、SHA1で実行して効率化します。

「SCRIPT LOADとEVALSHA」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

EVALの問題点

EVALは呼び出しのたびにスクリプト全文を送信します。頻繁に実行するスクリプトでは、帯域幅が無駄になります。SCRIPT LOADとEVALSHAを使えば、スクリプトを一度だけ読み込み、SHA1ハッシュで呼び出すことでこの問題を解決できます。

SCRIPT LOAD

SCRIPT LOAD scriptはスクリプトをコンパイルしてRedisにキャッシュし、そのSHA1ハッシュを返します。スクリプトは、サーバーが再起動するかSCRIPT FLUSHが呼び出されるまでキャッシュに残ります。

# Redis CLI:
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
# Returns: "abc123...sha1hash..."

EVALSHA

EVALSHA sha1 numkeys [keys] [args]は、SHA1で識別される、以前に読み込んだスクリプトを実行します。スクリプトがキャッシュされていない場合はNOSCRIPTで失敗します。

# Redis CLI:
EVALSHA abc123...sha1hash... 1 mykey
# Returns the same result as EVAL

アプリケーションのパターン

アプリケーションの起動時に、すべてのスクリプトをSCRIPT LOADで読み込み、SHA1を保存します。その後、実行時のすべての呼び出しにEVALSHAを使用します。

local redis = require("redis")
local scriptText = [[
  local v = redis.call("GET", KEYS[1])
  return v
]]
local sha = redis:script_load(scriptText)
-- Later:
redis:evalsha(sha, 1, "mykey")

NOSCRIPTエラーへの対処

Redisが再起動すると、キャッシュされたスクリプトは失われます。NOSCRIPTエラーを捕捉し、EVALにフォールバックして再読み込みします。

local function safeEvalsha(r, sha, script, numkeys, ...)
  local ok, result = pcall(r.evalsha, r, sha, numkeys, ...)
  if not ok and result:find("NOSCRIPT") then
    sha = r:script_load(script)
    result = r:evalsha(sha, numkeys, ...)
  end
  return result
end

SCRIPT EXISTS

SCRIPT EXISTS sha1 [sha1 ...]は、スクリプトがキャッシュされているかどうかを確認します。キャッシュ済みの各スクリプトには1、存在しないスクリプトには0を返します。再起動後の事前ウォームアップに使用します。

SCRIPT FLUSH

SCRIPT FLUSHは、Redisのメモリからキャッシュ済みのスクリプトをすべて削除します。スクリプトを変更したデプロイ時に使用します。

スクリプトのバージョン管理

スクリプトを変更すると、そのSHA1も変わります。SHA1をバージョン番号とともに保存し、デプロイ後に更新します。

帯域幅の節約

500バイトのスクリプトを毎秒10,000回呼び出す場合、EVALSHAはEVALと比べてRedisトラフィックを5 MB/s削減します。大規模環境では大きな差になります。

EVALSHAとRedisクラスター

クラスター�ードでも、スロットの制限に関してEVALSHAはEVALと同じように動作します。すべてのKEYSが同じスロットにある必要があります。

ベストプラクティス

本番環境では、起動時にスクリプトを読み込んだ後、常にEVALSHAを使用します。Redisの再起動後にも耐えられるよう、NOSCRIPTへのフォールバックを実装します。

EVALSHAに関する質問

EVALSHAはスクリプトテキストの代わりに何を使用しますか?

復習:SCRIPT LOADとEVALSHA

SCRIPT LOADでスクリプトを一度読み込み、SHA1を取得します。その後のすべての呼び出しにはEVALSHAを使用して、帯域幅を節約します。NOSCRIPTエラーが発生したら、再読み込みします。SCRIPT EXISTSでキャッシュの状態を確認し、SCRIPT FLUSHでキャッシュを消去します。

よくある質問

「SCRIPT LOADとEVALSHA」レッスンは無料ですか?

はい。「SCRIPT LOADとEVALSHA」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「SCRIPT LOADとEVALSHA」で何を学びますか?

SCRIPT LOADでスクリプトを読み込み、SHA1で実行して効率化します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「SCRIPT LOADとEVALSHA」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EVALとRedis Lua環境
  2. アトミック操作とトランザクション
  3. Luaによるレート制限
  4. SCRIPT LOADとEVALSHA
← Lua Academyに戻る