如何在Redis中更新依赖关键值?

我想知道是否有一种推荐的机制来根据其他键的值更新一个或多个键,如果这些值发生变化。

这有点像属性,或者是获取器和设置器,但是针对Redis键。

为什么我需要这个?

假设我可能有多个(我的情况下有10-100个)客户端都需要知道一个值dep1,这是indep1,...,indepN 的(纯)函数。一种方法是让所有客户端都观察indep1,...,indepN的变化,并计算dep1的值。这似乎会重复工作并增加网络流量。然而,如果dep1“自动”更新,它们只需要听取dep1的更改。

目前的想法

我唯一能想到的解决方案是拥有一个监视客户端来完成这项工作。但是,我想知道是否有更好的方法。也许使用Lua。顺便说一下,我完全是Redis和Lua的新手。

点赞
用户1472764
用户1472764

使用 Lua 看起来是一个不错的想法。你可以使用 Lua 脚本来更新任何 indep1 ... indepN 的值,这些脚本可以自动计算 dep1 并在单个事务中将其值设置到数据库中(Lua 脚本在任何其他命令处理之前运行到结束)。由于 dep1 在任何 indepX 的更新时原子更新,所以读取 dep1 就保证是正确的。然后,你只需要在客户端监视 dep1 的键空间变化即可。

注意:这可能不是最有效的方法,因为确定 dep1 的计算可能是昂贵的,并且每次更新 indepX 时都会重复计算。

2020-03-11 21:02:13