redis luaスクリプトによる原子間操作のケース
2412 ワード
リファレンスリンク
Redis luaスクリプトの使用
サンプルコード
if redis.call('EXISTS', KEYS[1]) == 1 then
redis.call('INCR', KEYS[1])
else
redis.call('SET', KEYS[1], 1)
redis.call('EXPIRE', KEYS[1], ARGV[1])
end
return redis.call('GET', KEYS[1])
luaスクリプトでredisコマンドを呼び出すには
redis.call('INCR', KEYS[1])
を使用します.最初のパラメータはredisのコマンドで、後ろのパラメータはコマンドの後ろのパラメータ値です.例
redisの命令はこうです
127.0.0.1:6379[11]> set age 12
OK
127.0.0.1:6379[11]>
ではluaスクリプトにはこのように書かれており、後の0は操作するKEYの個数を示しており、redisがluaスクリプトを使用してパラメータをどのように伝達するかについては、上の接続を見ることができます.
127.0.0.1:6379[11]> EVAL "return redis.call('SET', 'age',18)" 0
OK
127.0.0.1:6379[11]> get age
"18"
自分で書いた例はコマンドラインで実行します
127.0.0.1:6379[11]> EVAL "if redis.call('EXISTS',KEYS[1]) == 1 then redis.call('INCR',KEYS[1]) else redis.call('TTL',KEYS[1],ARGV[1]) end return redis.call('GET',KEYS[1])" 1 name 2500
"103"
127.0.0.1:6379[11]> ttl name
1 KEYS , 1, name KEYS , 2500 ARGV ,redis lua KEYS ARGV。
redis luaスクリプトコマンドフォーマット:
EVAL script numkeys key [key ...] arg [arg ...]
説明:
コマンドラインでluaスクリプトを実行する
127.0.0.1:6379> eval "redis.call('SET', KEYS[1], ARGV[1]);redis.call('EXPIRE', KEYS[1], ARGV[2]); return 1;" 1 test 10 60
(integer) 1
redis-cliコマンドを使用してスクリプトを実行する
書式設定
redis-cli --eval lua_file key1 key2 , arg1 arg2 arg3
注意事項
.lua
接尾辞,
で区切られています.前後にスペースが必要です.2つのスクリプトを実行する方法は少し異なり、他は同じです.
redis-cli
を使用する場合は、スクリプト内でredisのライブラリを選択する必要があります.コマンドラインでライブラリを選択することができます(redis.call('select',11)
など)、コマンドを実行するには、一般的にパッケージされたredisクライアントを使用して、redisのライブラリを直接選択します.luaの基本的な文法は菜鳥チュートリアルを見ることができます.