redis lua
# redis 连接是否正常 --raw避免中文乱码 redis-cli -h 1270.0.1 -p 6379 --raw > ping pong ## redis源代码目录 utils文件中 redis初始化脚本 reds_init_script # 获取键值的数据类型 redis> TYPE foo string # rate.limiting:127.0.0.1 是要操作的键使用 KEYS[1] 获取 # 10 3 是参数 在脚本中使用 ARGV[1] ARGV[2] 获得 # 注意命令中 逗号 , 两边的 空格不能省略,否则会出错 redis-cli --eval /path/to/ratelimiting.lua rate.limiting:127.0.0.1 , 10 3 # RDB持久化是通过快照完成的,当符合一定条件时 Redis会自动将内存中的所有数据生成一份副本并 # 存储在硬盘上,这个过程即 快照。 # AOF将Redis执行的每一条写命令追加到硬盘文件中,这一过程会降低Redis性能。
-- 全局变量无须声明就可以直接使用 默认值是nil a = 1 -- 为全局变量 a赋值 print(b) --无须声明直接使用默认为nil -- redis脚本中不能使用全局变量,只允许使用局部变量以防止脚本之间相互影响。 local c --声明局部变量c ,默认值nil -- lua逻辑操作符 not and or -- 只要操作数不是nil 或 false,逻辑操作符就认为操作数为真,否则为假。 -- 特别注意:即使是 0 或 空字符串也被当做真。 print(1 and 5) -- 5 print(1 or 5) -- 1 print(not 0) -- false print('' or 1) -- '' -- lua的逻辑操作符支持短路,也就是说对于 false and foo() , lua 不会调用foo()函数, -- or操作符与之类似。 -- 连接操作符 。连接操作符只有一个: ..,用来连接两个字符串。 print('hello' .. '' .. 'world!') -- 'hello world!' -- 连接操作符会自动把数字类型的值转换为字符串类型: print('hello' .. '' .. 25) -- 'hello 25' -- 取长度操作符使用 # print(#'hello') -- 5 -- if 语句 if 表达式 then 语句块 elseif 表达式 then 语句块 else 语句块 end -- 循环语句 while 表达式 do 语句块 end repeat 语句块 until 条件表达式 for 变量 = 初值, 终值, 步长 do 语句块 end local sum = 0 for i = 1, 100 do sum = sum + i end -- for 循环中变量(i)是局部变量 -- 表类型 -- 表是 lua中唯一的数据结构,可以理解为关联数组,任何类型的值(除了空类型)都可以作为表的索引。 a = {} -- 将变量a 赋值为一个表表 a['field'] = 'value' -- 将field 字段赋值 value print(a.field) -- value a.field 是 a['field']的语法糖 -- 也可以这样定义 people = { name = 'bob', age = 29 } print(people.name) --bob -- 当索引为整数的时候,表和传统的数组一样 a = {} a[1] = 'bob' a[2] = 'jeff' -- 也可以写成下面这样: a = {'bob','jeff'} -- 注意:lua约定数组的索引时从1开始的,而不是0 -- for语句遍历数组: for index, value in ipairs(a) do print(index) print(value) end for i = 1, #a do print(index) print(value) end -- 输出结果和上面相同 #a 的作用是获取表 a 的长度 -- lua还提供了一个迭代器 pairs() 用来变量非数组(关联数组)的表值 people = { name = 'bob', age = 29 } for index, value in pairs(people) do print(index) print(value) end -- 函数 function (参数列表) 函数体 end -- 赋值给一个局部变量 local square = function (num) return num * num end -- 前面的代码会被转换为: local square square = function (num) return num * num end -- unpack() 函数用来返回表中的元素 local function square (...) local argv = {...} for i = 1, #argv do argv[i] = argv[i] * argv[i] end return unpack(argv) end a, b, c = square(1, 2, 3) print(a) -- 1 print(b) -- 4 print(c) -- 9 -- 我们首先将 ... 转换为表 argv,然后对表的每个元素计算其平方值。unpack()函数用来返回表中的元素 -- 在脚本中使用 redis.call() 函数调用redis命令。 redis.call('set', 'foo', 'bar') local value = redis.call('get','foo') -- value 值为 bar -- redis.call()函数的返回值就是 redis命令的执行结果。
eval命令:
eval script numkeys key [key ...] arg [arg ...]
script参数是一段lua脚本参数
numkeys参数 用于指定键名参数的个数
key [key...]参数表示在脚本中所用到的那些redis键,这些键名参数在lua中通过全局变量KEYS数组,用1为基址的形式访问(KEYS[1]、KEYS[2]...)
arg [arg...]参数:在lua中通过全局变量ARGV数组访问,访问形式和KEYS变量类似(ARGV[1]、ARGV[2])
# "2" 是key的数量 eval "return redis.call('mset',KEYS[1],ARGV[1],KEYS[2],ARGV[2])" 2 ha he 111 222
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
2021-01-19 sublime 光标选中多行
2021-01-19 mysql删除重复记录并且只保留一条