• redis+lua实现脚本一键查询


    场景

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

  • 相关阅读:
    eclipse用法和技巧
    eclipse常用快捷键集锦
    移动端input的虚拟键盘影响布局
    使用github page + Hexo搭建个人博客折腾记
    javascript数组的排序(sort,冒泡)
    响应式布局与媒体查询
    css属性选择器诸如Class^=,Class*= ,Class$=释义
    怎么预览 GitHub 项目里的网页或 Demo
    常见浏览器的兼容问题(一)
    jQuery常用交互效果
  • 原文地址:https://www.cnblogs.com/huozhonghun/p/16337083.html
Copyright © 2020-2023  润新知