我是redis的新手,我是这么看的:
在我看来,watch/multi/exec是实现乐观事务的一种相当尴尬的方式。watch和exec之间的持续时间可能相当长,通常会持续几个来回才能完成(客户端需要向redis服务器发送多个命令)。
另一方面,lua脚本支持更强大的事务(回滚、复杂的条件检查……),并且不需要多次往返就可以完成(所有这些都在一个命令中)。而且更直接。
我知道lua脚本与watch/multi/exec相比相对较新。那么现在有什么理由使用watch/multi/exec吗?
我是redis的新手,我是这么看的:
在我看来,watch/multi/exec是实现乐观事务的一种相当尴尬的方式。watch和exec之间的持续时间可能相当长,通常会持续几个来回才能完成(客户端需要向redis服务器发送多个命令)。
另一方面,lua脚本支持更强大的事务(回滚、复杂的条件检查……),并且不需要多次往返就可以完成(所有这些都在一个命令中)。而且更直接。
我知道lua脚本与watch/multi/exec相比相对较新。那么现在有什么理由使用watch/multi/exec吗?
2条答案
按热度按时间hkmswyz61#
任何事情都有利弊。
为什么使用multi/exec(主要原因):
简单动词(如果你已经进入redis),不需要“学习”lua(尽管只需要15分钟)
在服务器处理中,不需要启动lua上下文(尽管这样做的代价很小)
确保块原子性
一旦您需要读取事务中的数据(即使用watch),为了方便起见,我会立即转到lua。当然,长时间运行的事务或lua脚本会阻塞服务器,因此请尽量避免这些情况。虽然在multi/exec的上下文中这样做比较困难,但lua中的无限循环可以用一行代码来完成:)
zsohkypk2#
如果您可以在一个简短的lua脚本中完成这一切,那么这可能是最有效的方法。但是,如果事务可能很长或需要访问外部资源才能完成,则应避免使用lua,特别是因为lua脚本execute会阻止redis服务器进行并行调用。