【问题标题】:Two apps share one Redis. How to prevent cache collisions?两个应用共享一个 Redis。如何防止缓存冲突?
【发布时间】:2017-04-01 10:47:07
【问题描述】:

应用程序的两个不同版本(调试和发布)共享同一个 Redis 实例。 Debug 和 Release 都有相同的源代码,因此存储在 Redis 中的缓存键也相同。

因此,当 Debug 执行 redis.StringSet(key1, value1) 时,Release 很容易覆盖 key1 或读取不正确的值(因为它应该有自己的 key1)。

有没有办法避免这种干扰?

【问题讨论】:

    标签: redis stackexchange.redis


    【解决方案1】:

    不要这样做 - 共享是不好的。为每个环境旋转一个 Redis 实例,每个服务器的开销可以忽略不计。

    【讨论】:

    • 点赞。永远不要用调试来搞乱生产环境
    【解决方案2】:

    在同一个 Redis 实例中使用两个数据库。 SELECT 指令允许您选择要使用的实例。 数据库的编号可以通过环境变量提供给您的应用程序,因此两个应用程序实例的应用程序代码保持相同。

    【讨论】:

    • 那是灾难的秘诀——改用专用的 Redis 实例。
    • 您能详细说明一下吗?为什么它会成为灾难的根源?
    • 绝对 - 碰巧我写了一些关于它的东西:) redislabs.com/blog/…
    • 我不相信你的演示。在 CPU 密集型操作上的无限循环是对 Redis 的不良使用,无论数据库的数量是多少,因为它会阻塞其他客户端。从技术角度来看,我的回答是正确的。但是,我绝对同意在同一个实例上混合调试和发布并不是一个好习惯,而且它可能会对生产实例的性能产生影响。
    • 演示是合成的,被授予,但事实仍然是编号数据库共享同一个线程,因此可以相互阻塞。
    【解决方案3】:

    另一种方法是给你的键一个通用的命名模式(前缀),并在属性文件中配置前缀。

    您可以在不同的环境中轻松使用不同的属性文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      相关资源
      最近更新 更多