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: mykeyKEYSと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 helloredis.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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- EVALとRedis Lua環境
- アトミック操作とトランザクション
- Luaによるレート制限
- SCRIPT LOADとEVALSHA