首页 > 编程知识 正文

redis使用教程,redis执行lua脚本

时间:2023-05-04 18:46:11 阅读:47671 作者:3148

在阅读这篇文章之前,请确保自己掌握了lua的基本语法。 如果不先去看lua教程,很简单。 在基本操作redis中,看下面的目录就知道了。 看看前面的部分,暂时足够:了

教程https://www.run OOB.com/Lua/Lua-tables.html

如果你觉得学lua太难了,这篇文章可能不适合你。 左转去看奥森厂长屠龙。

首先,说明使用Lua脚本的好处。

减少网络开销。 可以通过脚本形式一次发送多个请求,从而降低网络延迟。 原子操作。 redis将整个脚本作为一个整体运行,不会中途插入到其他命令中。 因此,编写脚本时不需要担心发生冲突条件,也不需要使用事务。 多路复用。 由于客户端发送的脚本永久存在于redis中,因此其他客户端可以重用脚本,而无需使用代码完成相同的逻辑。

调用的常见格式为:

evalscriptnumkeyskey [ key . ] arg [ arg . ] eval的语法格式。 现在,如下所示。

1脚本:您的lua脚本

2 numkeys: key的个数

3 key: redis各种数据结构的替代符号

4 arg:您的自定义参数

注意:必须是 KEYS[1] 大小写敏感,KEYS为键,ARGV为值

样本:

eval 'return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}' 2 zk zk2 1 50当然也可以这样使用。 这是不规范的使用方法,但先说,尽量写成键值对的形式

在Lua脚本中使用两个不同的Lua函数调用Redis的示例命令:

redis.call(redis.pcall ) (redis.call ) )与redis.pcall ) )非常类似。 唯一的区别是,当redis命令的执行结果返回错误时,redis.call ) )会向调用方返回错误。

Redis.call (和redis.pcall )这两个函数的参数可以是任何redis命令

Eval'returnRedis.call('set ',' foo ',' bar ' ) 0但一般不这么写。 不把参数写为skdts,把参数放在外面。 这样写

eval'returnredis.call('set ',KEYS[1],' bar ' ) '1 foo

redis是用c语言实现的,但lua的数据类型和c之间存在一些差异。 这包括两者之间的类型转换:

浮点数和nil如何处理:

eval ' return { 1,2,3.3333,' foo ',nil,' bar'}'01((integer ) ) 23 ) (integer ) (34 ) ) ) )

样本:

fori=1,10000 do Redis.call (' set ',' key'.i,' value'.i ) ) end编写了a.lua的脚本,将1W条数据插入到redis中,然后使用lua

假设设置为redis-CLI--Evala.Lua(Linux ) redis-CLI.exe-- evala.Lua (window )环境变量

输入key获取value的简单程序

local key=keys [1] local value=redis.call (' get ',key )当return value运行脚本时,可以检索get的值

注意redis-cli.exe --eval 2.lua name2。 在这里直接执行lua脚本时,如果有参数,就不需要写参数的数量,直接写参数

获取list的值

local key=keys [1] local startnum=keys [2] local endnum=keys [3] local list=redis.call (' l range ',key,startartnn )

那么,就写了这么多。 请自己多实践一下。

欢迎与Java框架、Java相关的交流

QQ群:965125360

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。