为什么Lua脚本可以保证原子性?


一、什么是原子性?

原子性这个概念在数据库中和在并发编程中是两种不同的概念:

  • 数据库中的原子性:要么都执行,要么都不执行
  • 并发编程中的原子性:操作不可拆分、不被中断

Lua脚本是属于并发编程中的原子性,可以保证原子性,但是不能保证要么都执行,要么都不执行

二、为什么Lua脚本可以保证原子性?

Lua脚本其实就是将多个命令打包成一个命令执行,但Lua脚本执行时不会被其他命令影响,原因是这期间会将其他客户端请求的命令先缓存起来,等Lua脚本执行完,才会把暂存的命令恢复执行。

三、Q&A

1、Lua脚本是能完全保证原子性吗?

严格来说,Lua脚本不能完全保证原子性,这里的原子性指的是数据库中的原子性

因为Lua脚本和Redis事务一样,都是不支持回滚的,所以如果Lua脚本执行期间发生错误,那么已经执行的逻辑是不会回滚的。

2、Lua脚本可以用到什么场景?


文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录