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

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

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

HUX布斯 2019-05-31 15:02:22
为什么在 Redis 实现 Lua 脚本事务
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

数据完整性

从很多方面来看,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-06-01
?
富国沪深

TA贡献1790条经验 获得超9个赞


为了将内存中的数据传送到磁盘上,我们需要使用交换文件。
这些文件与数据持久性无关,Redis会在退出前会将它们全部删除。由于对交换文件的访问方式大多为随机访问,因此建议将交换文件存储在固态磁盘上,这样可以大大提高系统的运行效率。


查看完整回答
反对 回复 2019-06-01
?
守候你守候我

TA贡献1802条经验 获得超10个赞

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-06-01
  • 3 回答
  • 0 关注
  • 1006 浏览

添加回答

举报

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