redis+lua实现脚本一键查询
场景
经常需要查redis某个key的值,需要执行三条命令才能查到
- redis-cli,启动redis
- select num,选择db
- get key,查询语句
需要执行三条命令才能实现某个key的查询
通过redis+lua实现的bat脚本替代上面多次操作
说明:C:\Users\Administrator\Desktop,这个是lua脚本的存放目录
redis.call('SELECT','2')
return redis.call('GET','a')
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua
pause
redis.call('SELECT','2')
return redis.call('GET',KEYS[1])
redis-cli -h xxx.redis.rds.aliyuncs.com -p 6379 -a user:password --eval C:\Users\Administrator\Desktop\redis.lua key
pause
Redis集群对lua脚本限制:调用必须要带有key,否则直接返回错误信息, “-ERR for redis cluster, eval/evalsha number of keys can’t be negative or zerorn”
(error) ERR ‘EVAL’ command keys must in same slot
原因:lua脚本为保证事务,传入的key必须是在同一个slot中
解决:在KEY上加{},这样在hash key 的时候只会计算{}内的内容,使得Key落在同一个slot内
比如,我们原来的key是ali1,ali2,现在我们写成{ali}1,{ali}2,就不会报错
设置指定key的value,传入key的旧值和新值
if val == ARGV[1]
then
redis.call('SET', KEYS[1], ARGV[2])
return 1
else
return 0
end
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua a , 1 2
pause
上面的代码实现了把a的值从1改为2
注意:[key…]空格,空格[args…],英文逗号要用空格隔开,所有单词都要用空格隔开,不然执行不成功