前言

众所周知,redis可以执行lua脚本,至于为什么要用lua脚本来操作redis,自行百度咯

先来讲一下最简单的方式,

关于如何在java springboot里用lua脚本,请查看我另一篇文章:https://www.cnblogs.com/daen/p/17418024.html

更为详细的资料请参考以下文章

https://blog.csdn.net/jiayibingdong/article/details/115186990

https://developer.aliyun.com/article/195914

https://www.jianshu.com/p/864ddda9288f

开始

打开你的redis安装根目录,在此目录打开cmd

直接使用命令

格式:redis-cli eval "具体的脚本" KEYS参数个数 KEYS1 KEYS2 ARGV1 ARGV2

每个KEYS用空格隔开,每个ARGV也是用空格隔开,KEYS和ARGV也是用空格隔开

如果没有KEYS参数,KEYS参数个数就写0

无参数

执行 redis-cli eval "local msg = 'abc';return msg;" 0

结果 "abc"

有KEYS参数

执行 redis-cli eval "local msg1 = KEYS[1];local msg2 = KEYS[2];return msg1 .. msg2;" 2 a b

结果 "ab"

其中的 .. 是拼接字符串的意思,具体请学习LUA脚本

有ARGV参数

执行 redis-cli eval "local msg1 = ARGV[1];local msg2 = ARGV[2];return msg1 .. msg2;" 0 c d

结果 "cd"

有KEYS和ARGV参数

执行 redis-cli eval "local msg1 = KEYS[1];local msg2 = KEYS[2];local msg3 = ARGV[1];local msg4 = ARGV[2];return msg1 .. msg2 .. msg3 .. msg4;" 2 a b c d

结果 "abcd"

写成Lua文件

每次都要在控制台中手敲lua比较烦人,我们可以写成lua文件来调用(下面的例子中,我在redis根目录新建了一个lua文件夹

然后再cmd中使用命令:redis-cli --eval lua脚本文件路径 KEYS1 KEYS2 , ARGV1 ARGV2

每个KEYS用空格隔开,每个ARGV也是用空格隔开,KEYS和ARGV用空格逗号空格( , )隔开

注意,不需要写KEYS参数个数了哦(当然也可以写)

当然了,你也可以将上述命令写成bat文件,更爽一步(下面的例子中,我把bat放在redis根目录)

记得加个pause,不然bat就一闪而过了,例如:

redis-cli --eval lua/1.lua
pause

下面的例子和上面的Lua命令是一样的,只不过多了换行而已

无参数

lua
local msg = 'abc';
return msg;
bat
redis-cli --eval lua/1.lua
pause

结果 "abc"

有KEYS参数

lua
local msg1 = KEYS[1];
local msg2 = KEYS[2];
return msg1 .. msg2;

其中的 .. 是拼接字符串的意思,具体请学习LUA脚本

bat
redis-cli --eval lua/1.lua a b
pause

结果 "ab"

有ARGV参数

lua
local msg1 = ARGV[1];
local msg2 = ARGV[2];
return msg1 .. msg2;
bat
redis-cli --eval lua/1.lua , c d
pause

结果 "cd"

注意bat文件里的空格和逗号

有KEYS和ARGV参数

lua
local msg1 = KEYS[1];
local msg2 = KEYS[2];
local msg3 = ARGV[1];
local msg4 = ARGV[2];
return msg1 .. msg2 .. msg3 .. msg4;
bat
redis-cli --eval lua/1.lua a b , c d
pause

结果 "abcd"

redis-cli 使用lua脚本笔记的更多相关文章

  1. Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性

    Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...

  2. Redis进阶实践之十九 Redis如何使用lua脚本

    一.引言               redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...

  3. 在redis中使用lua脚本

    在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lu ...

  4. redis中使用lua脚本

    lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...

  5. 新姿势!Redis中调用Lua脚本以实现原子性操作

    背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...

  6. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  7. StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

    前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...

  8. python redis客户端使用lua脚本

    有一个需求,为一个key设置一个field存储时间戳,每当有新数据,判断新数据时间戳是否大于之前的时间戳,如果是,更新时间戳,由于依赖中间执行结果,所以使用lua减少客户端和服务端通信次数. #!/u ...

  9. Php+Redis 实现Redis提供的lua脚本功能

    <?php require_once "predis-0.8/autoload.php"; $config['schema'] = 'tcp'; $config['host' ...

  10. 【笔记】《Redis设计与实现》chapter20 Lua脚本

    chapter20 Lua脚本 Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个Redis命令 20.1 ...

随机推荐

  1. 【ARM+Qt+OpenCV】基于ARM的双目图像采集系统

    点击查看代码 系统使用ARM处理器,运行linux系统,Qt创建工程编写主程序,可以使用OpenCV进行图像处理. 通过两个摄像头采集会图像,在LCD上进行显示,然后通过LCD上的按钮实现退出程序.保 ...

  2. Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis

    需求:  对数据库中的不断抓取的文章进行缓存,因此需要定时访问数据,写入缓存中 在捕获到的异常日志发现错误:Unable to Connect: sPort: 0 使用的访问方式是线程池的方式:Poo ...

  3. Selenium 测试介绍

    本文会从以下下几个方面介绍Selenium,相信大家阅读后会对Selenium有一个全新的认识.  为什么是Selenium  初探Selenium  Selenium组成  Selenium ...

  4. C系统级编程-复习

    数组对象类型 Array of Type,它是多个相同对象类型的一维派生类型,包含两要素:元素个数,元素的对象类型 所谓多维数组,不过是元素的迭代衍生,本质还是一维的 声明 对象标识的名称 对象类型 ...

  5. 事务及mysql中的隔离级别

    事务,一个或一组sql语句组成的执行单元,是最小的执行单元,要么全执行,要么全不执行.如果单元中某条sql语句执行失败,整个单元将会回滚,所有受影响的数据返回到事务开始前的状态. 事务具有ACID四个 ...

  6. golang 使用goto进行多错误处理

    goto 语句介绍 在 Go 语言中,可以通过goto语句跳转到标签,进行代码间的无条件跳转.另外,goto语句在快速跳出循环.避免重复退出方面可以简化代码实现过程,但在结构化程序设计中一般不主张使用 ...

  7. bee must have one register DataBase alias named `default`

    bee must have one register DataBase alias named default 在你初始化db,注册默认数据库时,看看你是否import初始化注册数据库驱动driver ...

  8. ESXi、PVE、unRaid对比

    目录 收起 [前言] [概述] [系统安装] [系统资源占用] [创建/编辑虚拟机] [硬盘直通] [PCI硬件直通] [显卡直通] [虚拟光驱] [自动开机.关机] [网络管理] [稳定性] [CP ...

  9. 一文速通Python并行计算:02 Python多线程编程-threading模块、线程的创建和查询与守护线程

    一文速通 Python 并行计算:02 Python 多线程编程-threading 模块.线程的创建和查询与守护线程 摘要: 本文介绍了 Python threading 模块的核心功能,包括线程创 ...

  10. nacos(八): sentinel——基本使用

    一.概要 在微服务的架构中,流控是一个重要的任务.sentinel是阿里开源的流量治理组件,针对访问的"资源"或服务路径进行流控,内置了限流.熔断及系统负载保护等功能. senti ...