首页 > 数据库 >Redis进阶 使用Lua编写Redis脚本

Redis进阶 使用Lua编写Redis脚本

时间:2023-12-27 23:56:24浏览次数:23  
标签:脚本 进阶 命令 Redis redis Lua call

前面学习了Lua的基本语法,接下来是使用Lua编写脚本

1.可以使用redis.call来调用redis命令

使用redis.call会将redis命令返回的类型 转换成对应的Lua数据类型。

关系如下

 

与redis.call想类似的就是redis.pcall。

【redis.call与redis.pcall的区别】

当命令出错的时候,redis.pcall会记录错误并继续执行。

而redis.call会返回错误,不继续执行。

 

2.返回值给客户端

Lua脚本可以使用return 返回值给客户端。对应的Redis也会将Lua的类型转换成redis的类型,与上图相反。

注意:Lua的false会被redis转化成空。

 

3.编译Lua脚本

编写脚本之后需要读取脚本,可以使用EVAL命令

 上面调用了一个赋值命令,需要注意拼写,KEYS和ARGV表示键和值

而且 前面还有一个 1 。告诉redis才脚本的键的个数为1 。

 

另外,每次执行脚本都要将脚本内容传给redis,非常麻烦。

所以,redis有EVALSHA 命令,每次需要再次调用脚本的时候只需要将脚本的SHA1值传给redis即可,但是首次发送前需要获取到SHA1值,

redis接收到命令之后会根据SHA1找到脚本,如果没有对应的脚本就会报错,提示你使用EVAL命令。

 

标签:脚本,进阶,命令,Redis,redis,Lua,call
From: https://www.cnblogs.com/AduBlog/p/17931703.html

相关文章

  • redis主从配置
    先学一个高端linux指令:catredis.conf|grep-v"^#"|grep-v"^$">msconf/redis-master.conf-v反向查找  "^#"以#开头的行   "^$"空行  将redis.conf去掉空行和以#开头的行,写入到msconf文件夹的redis-master.conf文件中 1、master-6380.conf配置文件主要......
  • Python进阶
    Object介绍  Python的Object是一种数据抽象或者数据结构抽象,Object应该同时具备:本征值(Indentity)、型式(Type)、值(Value)三个参数。a=45print(id(a))#表示在python中的唯一内存地址,具备唯一性print(type(a))print(a)/*-----output-------*/2063144480432<class'int'>......
  • 【Cpp 语言基础】 string 类型进阶使用
    大纲:1.特殊的初始化方式2.获取子串3.与<algorith>中对应的成员函数 ”串“类型类似于数组类型(C语言的字符串就是字符数组)。但是有一点不同之处,就是串经常作为一个整体才有实际的”意义“,而数组每个单元都有其”意义“。因此,“串”的操作中,很大部分是“串”的整体、局部......
  • redis哨兵
    Redis安装1、上传如下图:将redis-5.0.8.tar.gz包上传到目录:/apphome/下  2、解压如下图:解压压缩文件,执行命令:tar-zxvf redis-5.0.8.tar.gz,解压后生成新的文件夹redis-5.0.8  3、编译安装如下图:执行命令:make && make PREFIX=/apphome/redis  install3、......
  • 【C语言数据结构】对Lua Table源码的一次劣质学习
    /*new_key*/KLcBoolKLcmCreateMapKeyValue(KLCMAP_PTRpTag,KLCTVALUE_PTRpKv){ KLcBoolkbRet =KL_FALSE; KLcBoolkbIsKvLegal =KL_FALSE; DWORDdwInsertPos =0; DWORDdwFreePos =0; DWORDdwCollisionPos =0; KLCTVALUE_PTRptMainNo......
  • lua读写文件
    读写文件的模式r-读取模式w-写入模式(覆盖现有内容)a-附加模式(附加在现有内容之后)b-二进制模式r+-读取更新模式(现有数据保留)w+-写入更新模式(现有数据擦除)a+-附加更新模式(现有数据保留,只在文件末尾附加)do --readdatafromfile functionre......
  • 后端技术:Redis进行数据缓存的两种方法
    在fastapi项目中Redis进行数据缓存的两种不同的方法的demo第一种方法:通过FastAPI应用状态准备文件:models/redis.py为fastapi的数据库模型文件importosimportaioredisfromaioredisimportRedisasyncdefsys_cache()->Redis:"""系统缓存:return:cac......
  • Unity3D 项目中怎样正确的使用 Lua详解
    在Unity3D游戏开发中,Lua作为一种轻量级的脚本语言,被广泛应用于游戏逻辑的编写和扩展。本文将详细介绍如何正确地在Unity3D项目中使用Lua,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬......
  • redisearch入门
    redisearch1.安装docker安装dockerrun-d--nameredisearch-p8379:6379redislabs/redisearch2.验证验证search是否安装dockerexec-itredisearchredis-climodulelist1)1)"name"2)"ReJSON"3)"ver"4)(integer)99......
  • 06-redis的cluster集群
    一、介绍Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为......