redis+lua实现脚本一键查询
场景
经常需要查redis某个key的值,需要执行三条命令才能查到
- redis-cli,启动redis
- select num,选择db
- 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…],英文逗号要用空格隔开,所有单词都要用空格隔开,不然执行不成功
redis+lua实现脚本一键查询的更多相关文章
- StackExchange.Redis 使用LuaScript脚本模糊查询hash
原文:StackExchange.Redis 使用LuaScript脚本模糊查询hash 获取redis连接 public class RedisHelper { private static rea ...
- Redis进阶应用:Redis+Lua脚本实现复合操作
一.引言 Redis是高性能的key-value数据库,在很大程度克服了memcached这类key/value存储的不足,在部分场景下,是对关系数据库的良好补充.得益于超高性能和丰富的数据结构,Re ...
- Redis Lua脚本完全入门
1. 前言 Redis是高性能的KV内存数据库,除了做缓存中间件的基本作用外还有很多用途,比如胖哥以前分享的Redis GEO地理位置信息计算.Redis提供了丰富的命令来供我们使用以实现一些计算.R ...
- Redis 的Lua Script脚本功能
从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本进行求值 Redis2.6内置的Lua Script支持,可以在Redis的Server端一次 ...
- Redis Lua脚本调试
从版本3.2开始,Redis包含一个完整的Lua调试器,可以用来使编写复杂Redis脚本的任务更加简单. 由于Redis 3.2仍处于测试阶段,请unstable从Github 下载Redis 的分支 ...
- 在Spring中使用Redis Lua脚本批量删除缓存
背景 之前分享了一篇利用lua脚本批量删除redis的key的文章.现在项目中我打算使用spring的缓存,而Spring缓存以前我是用ehcache来做实现的.没发现什么问题..这次我换成redis ...
- 【连载】redis库存操作,分布式锁的四种实现方式[四]--基于Redis lua脚本机制实现分布式锁
一.redis lua介绍 Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向 ...
- Redis Lua 脚本使用
本文转载自Redis Lua 脚本使用 Lua 简介 Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 ...
- 像调试java一样来调试Redis lua
高并发的系统中,redis的使用是非常频繁的,而lua脚本则更是锦上添花.因为lua脚本本身执行的时候是一个事务性的操作,不会掺杂其他外部的命令,所以很多关键的系统节点都会用redis+lua来实现一 ...
随机推荐
- Smith数的判断
题目描述: smith数是指满足下列条件的可分解的整数: 其所有位数上的数字和等于其全部素数因子的数字之和. 例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数 ...
- jboss7学习4-具体下载安装
一.JBoss优点: a.Jboss支持热部署,将归档后的JAR.WAR文件到部署目录下自动加载部署,自动更新. b.在高并发访问时,性能比Tomcat更加优秀.高效. c.Jboss在设计方面与To ...
- git-flow-avh的使用过程
安装: 在mac上 brew install git-flow-avh 使用: 在仓库中 git flow init 一路回车就行,这个命令相当于写入一些默认命令流程到.git中, 此命令执行之后会增 ...
- 微信小程序下拉加载和上拉刷新两种实现方法
方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里设置window属性 设置js里onPullDownRefresh和onR ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- Java学习笔记(韩顺平教育 b站有课程)
Java重要特点 面向对象(oop) 健壮性:强类型机制,异常处理,垃圾的自动收集 跨平台性的 (一个编译好的.class可以在多个系统下运行) TEST.java -> TEST.class ...
- Ubuntu安装docker(摘自官网,自用)
在 Ubuntu 上安装 Docker 引擎(按照标红顺序执行命令) 预计阅读时间:11分钟 适用于 Linux 的 Docker 桌面 Docker Desktop 可帮助您在 Mac 和 Wind ...
- linux ping的三个数字(56,84,64)
参考:ping 深入剖析:https://www.cnblogs.com/aozhejin/p/15917312.html windows默认是32字节,linux是56字节说的都是数据包大小注意:1 ...
- 启动jar包的shell脚本
在jar包的同级目录新建文件例如:app_jar.sh 然后填写如下内容: #!/bin/bash #source /etc/profile # Auth:Liucx # Please change ...
- java实现sftp文件上传下载
/** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...