首页 > 数据库 >redis-cli 使用lua脚本笔记

redis-cli 使用lua脚本笔记

时间:2023-05-20 23:25:02浏览次数:47  
标签:cli KEYS redis ARGV lua local

前言

众所周知,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"

标签:cli,KEYS,redis,ARGV,lua,local
From: https://www.cnblogs.com/daen/p/17418001.html

相关文章

  • golang操作redis
    首先,基于docker查看redis镜像dockerps-a然后执行dockerrun-p6379:6379-dredis:latestredis-server,将端口映射到本机最后执行dockerexec-ti13e638ea1036redis-cli-h0.0.0.0-p6379执行链接操作......
  • redis学习3linux--黑马
    持久化RDBsavebgsave工作原理bgsave->发送指令到redis,redis返回Backgroundsavingstarted给客户端,然后调用fork函数生成子进程,子进程创建rdb文件,成功后返回消息给redis,可通过日志文件查看bgsave命令时针对save阻塞问题的优化。Reids内部所有涉及到RDB操作都采用bgsave的方......
  • Redis笔记(六):Redis订阅发布
    CommandsSUBSCRIBEchannel[channel...]PUBLISHchannelmessageUNSUBSCRIBE[channel[channel...]]PSUBSCRIBEpattern[pattern...]正则订阅PUBSUBsubcommand[argument[argument...]]查看订阅与发布系统状态PUNSUBSCRIBE[pattern[pattern...]]退订所有给......
  • 【≅Redis】BitMap类型介绍
    BitMap(2.2版新增)Bitmap,即位图,是一串连续的二进制数组(0和1),可以通过偏移量(offset)定位元素。BitMap通过最小的单位bit来进行0|1的设置,表示某个元素的值或者状态,时间复杂度为O(1)。由于bit是计算机中最小的单位,使用它进行储存将非常节省空间,特别适合一些数据量大且使用二值统计......
  • Field userClient in com.demo.order.service.OrderService required a bean of type'
    在SpringCloud项目中使用Feign进行远程调用遇到的错误。原因是因为UserClient在com.demo.feign.clients包下面,而order-service的@EnableFeignClientd注解却在com.demo.order包下面,这两个不在同一个包下,无法扫描到UserClient。解决方法有两种1.指定Feign应该扫描的包@EnableFeig......
  • Redis笔记(四):Java集成和配置
    JedisJedis是Redis官方提供的Java客户端,用于在Java应用程序中连接、操作Redis,它提供了与Redis通信的API,简化了Java开发者与Redis的交互流程。JedisGithubReadme:https://github.com/redis/jedis#getting-startedSpringBoot在SpringBoot2.x之后,原来使用的jedis被替换成了lettc......
  • 报错 libmysqlclient.so.20: cannot open shared object file: No such file or direc
    1背景环境:centos7,c++程序最近在重新部署一个老软件都时候遇到libmysqlclient.so.20:cannotopensharedobjectfile:Nosuchfileordirectory错误,这是提示缺失mysql的连接文件2解决方法错误提示已经很明显了,那就缺啥补啥,找一台装过mysql的机器查找此文件[root@localh......
  • springboot整合redis
     前言Redis是一款key-value存储结构的内存级NoSQL数据库支持多种数据存储格式支持持久化支持集群Redis下载(Windows版)https://github.com/tporadowski/redis/releasesRedis安装与启动(Windows版)Windows解压安装或一键式安装服务端启动命令redis-server.exe......
  • redis实现生成自增编码两种方式
    redis实现生成自增编码两种方式文章目录 https://blog.csdn.net/MS_SONG/article/details/130226992方式一方式二生成编码时处理并发+事务实际场景 思路:都是从缓存中取,取出来+1再放入缓存,以便下次取用区别:方式一,手动+1;方式二:利用redis.increment实现自增;提示:写......
  • Redis笔记(三):事务
    什么是Redis事务Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个......