• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

redis+lua实现脚本一键查询

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

场景

经常需要查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…],英文逗号要用空格隔开,所有单词都要用空格隔开,不然执行不成功


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用lua做序列化和反序列化发布时间:2022-07-22
下一篇:
lua字符串合并发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap