RedisのLuaスクリプトサポート
2725 ワード
Redis 2.6.0に内蔵されたLua Scriptは、Redisのサーバ側で大量のロジックを一度に実行できるようにサポートされています. Script全体のデフォルトは1つのトランザクションにあります. Scriptに含まれるすべてのKeyはできるだけ変数を使って、外から伝わって、Redisに最初からあなたがどのkeyを変えるかを知らせます. EVALは、1セグメントのScript比較費帯域幅を伝送するたびに、scriptをSCRIPT LOADでロードし、ハッシュ値を返すことができます.そしてEVALHASHで実行します. に内蔵されたLUAライブラリにはCJSONがあり、JSON文字列を処理することができます.
参照:http://www.searchdatabase.com.cn/showcontent_70423.htm
redisでluaを実行するコマンドはeval、evalsha、script load
http://redis.readthedocs.org/en/latest/script/index.html
RedisのEVALコマンドパラメータの説明は以下の通りです.
EVAL script numkeys key [key ...] arg [arg ...]
scriptパラメータは、Redisサーバコンテキストで実行されるLua 5.1スクリプトプログラムです.このスクリプトはLua関数として定義する必要はありません.
numkeysパラメータは、キー名パラメータの個数を指定するために使用されます.
キー名パラメータkey[key...]EVALの3番目のパラメータから計算すると、スクリプトで使用されるRedisキー(key)を表し、これらのキー名パラメータはLuaでグローバル変数KEYS配列を介して1をベースとした形でアクセス可能である(KEYS[1],KEYS[2],これに類する).
コマンドの最後に、キー名パラメータではない追加パラメータarg[arg...]は、Luaではグローバル変数ARGV配列でアクセスでき、アクセス形式はKEYS変数と類似している(ARGV[1]、ARGV[2]など).
上の長い説明は簡単な例でまとめることができます.
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"2 key1 key2 first second 1) "key1"2) "key2"3) "first"4) "second"
ここで、「return{KEYS[1],KEYS[2],ARGV[1],ARGV[2]}」は評価されたLuaスクリプトであり、数字2はキー名パラメータの数を指定し、key 1とkey 2はキー名パラメータであり、それぞれKEYS[1]とKEYS[2]を使用してアクセスするが、最後のfirstとsecondは追加パラメータであり、ARGV[1]とARGV[2]でアクセスできる.
参照:http://redis.readthedocs.org/en/latest/script/eval.html
SCRIPT LOAD script
スクリプトscriptをスクリプトキャッシュに追加しますが、すぐにスクリプトを実行するわけではありません.
EVALコマンドは、スクリプトキャッシュにスクリプトを追加しますが、入力したスクリプトはすぐに評価されます.
指定されたスクリプトがキャッシュに含まれている場合は、動作しません.
このスクリプトは、スクリプトがキャッシュに追加された後、EVALSHAコマンドによって、スクリプトのSHA 1チェックサムを使用して呼び出されます.
スクリプトは、SCRIPT FLUSHが実行されるまで、キャッシュに無限に長い時間保持できます.
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
指定されたsha 1検証コードに基づいて、サーバにキャッシュされたスクリプトを評価します.
スクリプトをサーバにキャッシュする操作は、SCRIPT LOADコマンドで行えます.
このコマンドの他の場所、例えばパラメータの入力方式は、EVALコマンドと同じです.
参照:http://www.searchdatabase.com.cn/showcontent_70423.htm
redisでluaを実行するコマンドはeval、evalsha、script load
http://redis.readthedocs.org/en/latest/script/index.html
RedisのEVALコマンドパラメータの説明は以下の通りです.
EVAL script numkeys key [key ...] arg [arg ...]
scriptパラメータは、Redisサーバコンテキストで実行されるLua 5.1スクリプトプログラムです.このスクリプトはLua関数として定義する必要はありません.
numkeysパラメータは、キー名パラメータの個数を指定するために使用されます.
キー名パラメータkey[key...]EVALの3番目のパラメータから計算すると、スクリプトで使用されるRedisキー(key)を表し、これらのキー名パラメータはLuaでグローバル変数KEYS配列を介して1をベースとした形でアクセス可能である(KEYS[1],KEYS[2],これに類する).
コマンドの最後に、キー名パラメータではない追加パラメータarg[arg...]は、Luaではグローバル変数ARGV配列でアクセスでき、アクセス形式はKEYS変数と類似している(ARGV[1]、ARGV[2]など).
上の長い説明は簡単な例でまとめることができます.
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"2 key1 key2 first second 1) "key1"2) "key2"3) "first"4) "second"
ここで、「return{KEYS[1],KEYS[2],ARGV[1],ARGV[2]}」は評価されたLuaスクリプトであり、数字2はキー名パラメータの数を指定し、key 1とkey 2はキー名パラメータであり、それぞれKEYS[1]とKEYS[2]を使用してアクセスするが、最後のfirstとsecondは追加パラメータであり、ARGV[1]とARGV[2]でアクセスできる.
参照:http://redis.readthedocs.org/en/latest/script/eval.html
SCRIPT LOAD script
スクリプトscriptをスクリプトキャッシュに追加しますが、すぐにスクリプトを実行するわけではありません.
EVALコマンドは、スクリプトキャッシュにスクリプトを追加しますが、入力したスクリプトはすぐに評価されます.
指定されたスクリプトがキャッシュに含まれている場合は、動作しません.
このスクリプトは、スクリプトがキャッシュに追加された後、EVALSHAコマンドによって、スクリプトのSHA 1チェックサムを使用して呼び出されます.
スクリプトは、SCRIPT FLUSHが実行されるまで、キャッシュに無限に長い時間保持できます.
redis> SCRIPT LOAD "return 'hello moto'"
"232fd51614574cf0867b83d384a5e898cfd24e5a"
redis> EVALSHA 232fd51614574cf0867b83d384a5e898cfd24e5a 0
"hello moto"
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
指定されたsha 1検証コードに基づいて、サーバにキャッシュされたスクリプトを評価します.
スクリプトをサーバにキャッシュする操作は、SCRIPT LOADコマンドで行えます.
このコマンドの他の場所、例えばパラメータの入力方式は、EVALコマンドと同じです.