详解事务模式和Lua脚本,带你吃透Redis 事务
💡
原文中文,约7400字,阅读约需18分钟。
📝
内容提要
本文介绍Redis事务的两种模式:事务模式和Lua脚本模式,Lua脚本具备原子性和隔离性,Redis事务具备隔离性和原子性但不支持回滚,Lua脚本可以减少网络开销和实现原子操作,但要避免阻塞和测试脚本。
🎯
关键要点
- Redis事务包含两种模式:事务模式和Lua脚本。
- Redis事务模式保证隔离性,但不支持持久性和回滚。
- Lua脚本具备原子性和隔离性,但在脚本报错时不会回滚。
- Redis事务的执行分为三个阶段:开启事务、命令入队、执行或丢弃事务。
- 在事务执行前,Redis key可以被修改,使用WATCH命令可以实现乐观锁。
- Redis事务的原子性在特定条件下才具备,入队时报错会放弃事务执行。
- Redis的隔离性是指并发事务之间互不干扰,EXEC命令执行后保证命令队列中的所有命令执行完。
- Redis的持久性取决于持久化配置,无法保证持久性。
- Redis事务的一致性与数据库约束有关,保证约束即保证一致性。
- Lua脚本可以减少网络开销,实现原子操作,并且可以被多个客户端复用。
- EVAL命令用于执行Lua脚本,EVALSHA命令用于执行已缓存的Lua脚本。
- Lua脚本是另一种形式的事务,适用于分布式锁、延迟队列等场景。
- 编写Lua脚本时需避免复杂和耗时的逻辑,并仔细测试脚本。
➡️