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が実行されるまで、キャッシュに無限に長い時間保持できます.
    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コマンドと同じです.