Redis开发与运维笔记-事务与Lua
事务
Redis提供了简单的事务功能,将一组需要一起执行的命名放到multi和exec两个命名之间。multi代表事务开始,exec代表事务结束,他们之间的命令都是原子顺序执行的。停止事务可以使用discard命令执行。
事务错误处理机制
命令错误
一般是操作命令语法错误,比如将set命令写错成sat,这种错误会造成整个事务无法执行。
运行时错误
一般是命令语法没有问题,而是在命令执行过程中出现报错,比如操作命令数据类型不支持等错误。
如果事务中有多条执行语句,执行语句成功的不会进行回滚操作。所以说明Redis事务不支持回滚操作。
watch命令
比如有一些应用场景,在事务执行之前,需要确保事务中的key没有被其他客户端修改过,就可以使用watch命令来进行监控,一旦事务中的key被其他客户端修改过,就会导致整个事务无法执行成功。
Lua
Lua语言
数据类型
Lua语言提供了几种数据类型:booleans,numbers,strings,tables
关键字 local(代表当前是局部定义)
Redis与Lua
在Redis中使用Lua
有两种方式可以执行lua脚本:eval和evalsha
eval 脚本内容 key个数 key列表 参数列表
如果Lua脚本较长,可以使用redis-cli --eval直接执行脚本文件
evalsha 脚本SHA1值 key个数 key列表 参数列表
执行evalsha命令,需要先将执行脚本加载到redis内存中的到SHA1值,可以使用 redis-cli script load命令加载脚本
Lua使用Redis API
Lua可以使用redis.call函数实现对redis的访问操作 如:
redis.call("set","lua","hello world")
Redis管理Lua脚本
script load 加载Lua脚本
script exists 判断SHA1值是否已存在
script flush 清除已经加载的所有Lua脚本
script kill 杀掉正在执行的Lua脚本 注意:如果当前脚本在执行写操作命令时,那么杀死命令不会生效