#青训营 x 字节后端训练营# ## redis 事务lua脚本
### multi exec
基本不会使用
- multi - 开启事务
相当于MySQL中的begin 或者 start transaction
- exec - 提交事务
相当于 commit
- discard - 取消事务
rollback
- watch - 检测事务中key的变化, key变化则取消事务, 返回nil

事务实现 加倍操作
``` redis
WATCH score:10001
val = GET score:10001
MULTI
SET score:10001 val*2
EXEC
```
### Lua脚本

1. 减少网络传输
2. 实现原子性

实现原子性, Redis中嵌入了Lua虚拟机, 可以写多个语句;
当有一个脚本正在被执行的时候, 不会有其他命令被执行, 具备原子性

sha1 40位字符串, 减少网络传输; 保存sha1 -> xx.lua

1. 项目启动, 建立连接并验证后, 先加载所有项目中使用的lua脚本(script load)
2. 项目中若需要热更新, 通过redis-cli script flush; 然后可以通过订阅发布功能通知所有服务器重新加载lua脚本;
3. 若项目中lua脚本发生阻塞, 可通过script kil暂停当前阻塞脚本你的执行;
展开
评论