0Pricing
Lua Academy · レッスン

EVALとRedis Lua環境

EVALでLuaスクリプトを実行し、KEYS/ARGVとスクリプトキャッシュを理解します。

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

なぜRedisでLuaを使うのですか

Redisでは、EVALを使ってサーバー内でLuaスクリプトを実行できます。スクリプトはアトミックに実行されます — 他のRedisコマンドが並行して実行されないため、安全な複数ステップ操作が可能です。

EVALコマンド

EVAL script numkeys key [key ...] arg [arg ...] — スクリプトはKEYSテーブルを介してキーにアクセスし、ARGVテーブルを介して引数にアクセスします(1始まり)。

-- Redis CLI:
EVAL "return KEYS[1]" 1 mykey
-- Returns: mykey

KEYSとARGVへのアクセス

Luaでは、KEYSとARGVはEVALによって値が設定されるグローバルテーブルです。

EVAL "
local key = KEYS[1]
local val = ARGV[1]
redis.call('SET', key, val)
return redis.call('GET', key)
" 1 greeting hello

redis.callとredis.pcall

redis.call(cmd, ...)はRedisコマンドを実行し、失敗するとLuaエラーを発生させます。redis.pcallはエラーを発生させる代わりに、エラーテーブルを返します。

local ok, err = pcall(function()
  redis.call("INVALID_CMD")
end)
if not ok then print("Error caught:", err) end

戻り値

Luaの型はRedisのレスポンス型に変換されます:数値 → 整数、文字列 → バルク文字列、テーブル → マルチバルク配列、false/nil → nilレスポンス、true → 整数1。

スクリプトのキャッシュ

Redisはコンパイル済みスクリプトをSHA1でキャッシュします。最初のEVALでコンパイルとキャッシュが行われます。同じSHAを使った後続の呼び出し(EVALSHA経由)では、コンパイルが省略されます。

Redisデータ型へのアクセス

すべての標準Redisコマンドをredis.call経由で利用できます:GET、SET、HGET、LPUSH、EXPIREなど。

local count = redis.call("INCR", KEYS[1])
redis.call("EXPIRE", KEYS[1], 3600)
return count

アトミック性の保証

Luaスクリプトの実行中、Redisは他のすべてのクライアントをブロックします。スクリプトは高速(マイクロ秒からミリ秒)である必要があります。実行時間の長いスクリプトはサーバー全体をブロックします。

RedisでのLuaのバージョン

RedisにはLua 5.1(または5.1互換)が組み込まれています。gotoやbit32など、一部の機能は異なる場合があります。JSONやMessagePackには、Redisが提供するcjsonおよびcmsgpackライブラリを使用します。

エラー処理のベストプラクティス

失敗する可能性のある操作(型エラーなど)にはredis.pcallを使用します。クライアントが解釈できる構造化されたエラーテーブルを返します。

Redisスクリプトのデバッグ

redis.log(redis.LOG_DEBUG, "message")を使用して、デバッグメッセージをRedisのログに書き込みます。SCRIPT LOADの前に、redis-cliのEVALでスクリプトをテストします。

Redis Luaに関する質問

EVALを使ってRedisでLuaスクリプトを実行する主な利点は何ですか?

復習:EVALとRedisのLua環境

EVALはRedisでLuaスクリプトをアトミックに実行します。KEYS[n]でキーに、ARGV[n]で引数にアクセスします。コマンドにはredis.callを使用します。スクリプトはSHA1でキャッシュされます。サーバーをブロックしないよう、スクリプトは高速に保ちます。

よくある質問

「EVALとRedis Lua環境」レッスンは無料ですか?

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

「EVALとRedis Lua環境」で何を学びますか?

EVALでLuaスクリプトを実行し、KEYS/ARGVとスクリプトキャッシュを理解します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「EVALとRedis Lua環境」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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