lua篇
操作
循环
For i=1, #myArray(#表示数组长度)
do
sum = sum + i
end(SHELL中是done)
Tips1: for 循环中可以使用内置 ipairs函数遍历数组,用pairs函数遍历哈希
for index, value in ipairs(myArray)
do
-- something...
end
判断
if myArray[i] == "jedis"
then
print("true")
break
else
--do nothing
end
函数
function contact(str1, str2)
return str1 .. str2
end
数据类型
Strings
local strings hello = "world"
print(hello)
Tables (用作数组或者哈希,下标从1开始)
local tables myArray = {"redis", "jedis", true, 88.0}
local tables map = {age=28, name="tom"}
Booleans
Numbers
Redis 使用lua
eval
使用redis-cli --eval非连接, 或者直接在连接中eval
evalsha 脚本 key个数 key列表 参数列表
EVAL 'return "hello " .. KEYS[1] .. ARGV[1]' 1 redis world
evalsha
eval的参数是脚本或者脚本文件,evalsha的参数是sha1哈希,直接调用存在redis服务端的lua命令,提高传输效率。
evalsha 脚本SHA1 key个数 key列表 参数列表
Script 系列(LOAD KILL FLUSH EXISTS)
redis-cli script load "$(cat lua_get.lua)"
lua使用redis
redis.call
当执行失败时直接返回
redis.pcall
当执行失败时继续执行
redis.log
将lua脚本的日志输出到redis的日志文件中
注意
- 当lua脚本执行写操作时,script kill会失败,只能用shutdown save停掉redis服务。
- 可以在redis.conf中设置lua脚本的执行超时时间
客户端篇
RESP协议
发送格式
*< 参数数量 > CRLF
$< 参数 1 的字节数量 > CRLF
< 参数 1> CRLF
...
$< 参数 N 的字节数量 > CRLF
< 参数 N> CRLF
注:CRLF就是\r\n
返回格式
状态回复:第一个字节为+
错误回复:第一个字节为-
整数回复:第一个字节为:
字符串回复:第一个字节为$
多字符串回复:第一个字节为*