dot Redis 8 来了——而且是开源的

了解更多

11.2.1 为什么在 Lua 中使用锁?

返回主页

11.2.1 为什么在 Lua 中使用锁?

让我们首先处理为什么要决定使用 Lua 构建锁的问题。主要有两个原因。

从技术上讲,当使用 EVALEVALSHA 执行 Lua 脚本时,
脚本或哈希后的第一组参数是将要在 Lua 中读取或写入的键(我在 11.1.1 和 11.1.2 节的两个注释中提到了这一点)。这主要是
为了允许以后的 Redis 集群服务器拒绝读取或写入特定分片上不可用的键的脚本。
如果我们不知道将要读取/写入哪些键,我们就不应该使用 Lua(我们应该使用 WATCH/MULTI/
EXEC 或锁)。因此,任何时候我们读取或写入未作为脚本的 KEYS 参数提供的键时,如果以后迁移到 Redis 集群,我们都有可能出现不兼容或损坏的情况。
第二个原因是,在某些情况下,在
Redis 中操作数据需要初始调用时不可用的数据。一个例子是
从 Redis 获取一些 HASH 值,然后使用这些值来访问

来自关系数据库的信息,然后导致写回到 Redis。我们
当我们调度将行缓存回 Redis 时,我们在第 2.4 节首次看到这一点。
我们没有费心在那种情况下加锁,因为写入同一行的两个副本
两次不会是一个严重的问题。但在其他缓存场景中,读取
要缓存的数据多次可能会带来比可接受的更多的开销,或者可能
甚至可能导致较新的数据被较旧的数据覆盖。
鉴于这两个原因,让我们重写我们的锁以使用 Lua。
信任
隐私

使用条款