redis学习笔记(4) | 青训营

99 阅读1分钟

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的日志文件中

注意

  1. 当lua脚本执行写操作时,script kill会失败,只能用shutdown save停掉redis服务。
  2. 可以在redis.conf中设置lua脚本的执行超时时间

客户端篇

RESP协议

发送格式

*< 参数数量 > CRLF

$< 参数 1 的字节数量 > CRLF

< 参数 1> CRLF

...

$< 参数 N 的字节数量 > CRLF

< 参数 N> CRLF

注:CRLF就是\r\n

返回格式

状态回复:第一个字节为+

错误回复:第一个字节为-

整数回复:第一个字节为:

字符串回复:第一个字节为$

多字符串回复:第一个字节为*