为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在 Redis 实现 Lua 脚本事务

为什么在 Redis 实现 Lua 脚本事务

德玛西亚99 2019-05-15 12:09:37
为什么在 Redis 实现 Lua 脚本事务
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

数据完整性

从很多方面来看,Redis 很像当初采用 InnoDB 前的 MySQL。而 Redis 采用了一种很合理的方式来保证数据完整性(复制,AOF 等),并且从 Redis2.6 开始引入的 Lua 脚本在功能与易用性方面为 Redis 的成长提供了很大助力。

相对来说,Lua 脚本与其他数据库中的存储过程很相似,但脚本的执行有些许不同。在本文中最重要的一点就是一旦将脚本写入数据库,它会一直执行直到以下任一种情况出现:

1. 完成所有工作,所有写操作处理完成后脚本会自动退出。

2. 脚本运行时出错并中途退出,所有以前执行的写操作都已发生,但不会再有其他写操作。

3. Redis 通过 SHUTDOWN NOSAVE 关闭时(不保存)。

4. 你附加了调试器来“使”脚本完成 #1 与 #2 (或其他手段来保证不会丢失数据)。

对于使用数据库开发软件的人,我想你也认同只有情景 #1 是最理想的。情景 #2,#3,#4 都会导致数据异常(#2 与
#4)和/或数据丢失(#3 和 #4)。如果你很重视数据,你应该尽可能地阻止数据异常与丢失。这不是哲学,而是工作(This is not
philosophy, this is doing your job)。但很遗憾目前的 Redis 也帮不了你多少。所以我决定改变这种情况。



查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信