Redis 复制而不是 RO 从站

Redis replication and not RO slaves

美好的一天!
假设我们有一个 redis-master 和几个 slave。 master 目标是存储所有数据,slave 用于为用户查询数据。但是查询有点复杂,需要存储一些临时数据。我还想将查询结果缓存几分钟。

我应该如何配置复制以保存临时数据和缓存?

Redis slaves 有可选的支持来接受写入,但是在使用它们之前你必须了解 writable slaves 的一些限制,因为它们有一些重要的问题。

  1. 在从服务器上创建的密钥将不支持过期。实际上,在 Redis 的最新版本中,它们 似乎 可以工作,但实际上是泄漏的而不是过期的,直到下一次您从头开始重新同步从属与主控或发出 FLUSHALL 或类似命令。这个问题有很深的原因......目前还不清楚我们是否会完全弃用可写从属,找到解决方案,或者拒绝可写从属的过期。
  2. 无论如何,您可能想要使用不同的 Redis 数字数据库(SELECT 命令)来存储您的中间数据(您可以使用 MULTI/.../MOVE/EXEC 事务顺序在当前选择的数据所属的数据库中生成中间结果,并将键移到其他数据库中,这样就可以清楚键是否正在累积,并且您可以不时地使用 FLUSHDB。
  3. 您在从属服务器上创建的密钥是 易失性,当主服务器与从服务器重新同步时,它们可能会在任何时候消失。对你来说看起来不是问题,因为如果他们的密钥不再存在,你可以重新计算,但应该小心,
  4. 如果您将这个从属选为主控,您就会在其中获得额外的密钥。

所以在这个设置中肯定有一些事情要记住,但它在某种程度上是可行的。但是,您可能需要考虑其他策略。

  1. Lua 从属端的脚本,以便在 Lua 中过滤您的数据。不如 Redis C 命令快。
  2. 直接在实际数据集中预先计算数据,以便仅使用只读命令即可进行查询。
  3. MIGRATE 以便将感兴趣的密钥从从属迁移到专门设计用于执行 post 计算的实例(另一个主)。

如果不深入分析实际用例/问题,很难说出什么是最佳策略,但我希望这个通用指南能有所帮助。