redis+lua实现脚本一键查询

导读:本篇文章讲解 redis+lua实现脚本一键查询,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

场景

经常需要查redis某个key的值,需要执行三条命令才能查到

  1. redis-cli,启动redis
  2. select num,选择db
  3. get key,查询语句

需要执行三条命令才能实现某个key的查询

有没有一种方式,直接一条命令搞定,并且做成脚本,实现快捷查询?

通过redis+lua实现的bat脚本替代上面多次操作

实现

说明:C:\Users\Administrator\Desktop,这个是lua脚本的存放目录

单机环境

lua脚本代码
redis.call('SELECT','2')
return redis.call('GET','a')
bat脚本代码
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua
pause

集群环境

lua脚本代码
redis.call('SELECT','2')
return redis.call('GET',KEYS[1])
bat脚本代码
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”

遇到的问题

脚本只启动redis,没问题,如果配合lua脚本查询,会发生闪退?
其实命令已经正常执行了,只不过窗口闪退了
目前解决的办法是加上pause,让窗口停留
(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的旧值和新值

lua脚本代码
if val == ARGV[1]
then
	redis.call('SET', KEYS[1], ARGV[2])
	return 1
else
	return 0
end
bat脚本代码
redis-cli --eval C:\Users\Administrator\Desktop\redis1.lua  a , 1 2
pause

上面的代码实现了把a的值从1改为2
注意:[key…]空格,空格[args…],英文逗号要用空格隔开,所有单词都要用空格隔开,不然执行不成功

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/85460.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!