caching - 将 session 信息存储在 Redis 集群中是否安全高效

标签 caching redis high-availability distributed-system failover

这个问题听起来很像:this one ,但我相信不是。虽然这个问题非常具体,但我认为它不足以解决我的疑问。
我正在尝试为我拥有的应用程序部署设置 Redis 集群。我使用 Redis 存储各种信息,例如 session 信息、计划作业元信息等 到目前为止,我一直在使用单节点实例。但是,我正在考虑迁移到用于 HA 的 Redis 集群。我知道 Redis 是单线程的,只提供尽力而为的一致性,而不是强一致性提供者。因此,就我在单个节点上而言,我在一致性方面没有任何问题(除了容错方面)。但是,当我转移到集群设置时,这仍然不是真的(至少根据我的理解)。
我的问题如下:

  • 如果我迁移到 Redis 集群设置,我是否会在一致性上做出妥协以获得 ? Redis website其本身表示,鉴于其 ,集群设置不提供强一致性保证。异步复制 方法。在那种情况下,人们使用/建议 Redis 作为存储 session 的可行解决方案的论点是什么,如 previous post ?仅适用于单节点设置吗?还是每次发生时都丢失一次 session 是可以的?
  • 让 Redis 真正成为 容错我们必须使用持久性功能,否则它不能重新生成状态? (我相信这也会带来性能上的轻微妥协)
  • 我的理解是否正确,Redis Cluster 仅在数据被分片和分布的意义上提供 HA,并且不提供自动 故障转移 ?为 Redis 哨兵 必须使用吗?
  • 人们还使用哪些其他解决方案来快速访问具有强一致性要求的数据?
  • 最佳答案

    我可能无法深入回答所有问题。在详细了解您的问题之前;
    可用性和一致性之间的关系不仅与 Redis 有关,而且是分布式系统的核心原则之一。可以用CAP Theorem解释.是的,你会妥协 consistencyavailability因为you can't sacrifice partition tolerance在分布式系统中。一些分布式数据库技术提供配置以与仲裁可用性的权衡可用性具有“强”一致性(例如 Cassandra )。
    如果你想要 HA,那么 Redis 集群可能不是你想要的。当您需要将数据分片(分配负载)到多个节点时,Redis Cluster 是一个很好的解决方案。当您达到实例的内存限制时,这是“必须的”。您可能需要的是 Redis Sentinel .

    Redis Sentinel provides high availability for Redis. In practical terms this means that using Sentinel you can create a Redis deployment that resists without human intervention certain kinds of failures.


  • 您分享的帖子已经有将近 8 年的历史了,它可能无法涵盖或回答今天的所有要求。这篇文章也没有要求任何场景或解决方案来涵盖分布式 Redis。
  • Redis 仍然是一个很好的 session 解决方案(键/值的完美示例)。您可以垂直扩展并保持在一个节点中以实现 session 的强一致性。
  • 您可以切换到其他具有可配置一致性(数据准确性)的数据库,例如 Cassandra 并设置您的 quorum根据业务需要。它不会是 Elixir ,总是需要权衡取舍。
  • 你可以寻找第三方的仲裁工具或实现一个在 Redis 中具有强一致性的工具。 Redis 的法定人数与 Cassandra 的不同。

  • The quorum is only used to detect the failure. In order to actually perform a failover, one of the Sentinels need to be elected leader for the failover and be authorized to proceed. This only happens with the vote of the majority of the Sentinel processes.


  • Redis sentinel 也可能是这里的答案。官方文档涵盖了很多细节。

  • If a master is not working as expected, Sentinel can start a failover process where a replica is promoted to master, the other additional replicas are reconfigured to use the new master, and the applications using the Redis server are informed about the new address to use when connecting.


  • Redis 集群的规范和用例与 Sentinel 不同。 Redis Sentinels 最重要的权力之一来自故障转移期间的领导人选举。 AFAIK,集群没有这个(没有尝试但在文档中看到了一些细节)。
  • 我间接回答并举例说明了这一点。垂直(而不是水平)缩放可能是一种选择。您可以向您的实例添加更多资源(RAM 等)。另一种选择可能是考虑 Cassandra 并进行调整以实现即时一致性。权衡再次是可用性。如果您的节点关闭,那么您的读取和写入都会失败。
  • 关于caching - 将 session 信息存储在 Redis 集群中是否安全高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62998033/

    相关文章:

    php - WordPress 中的 Memcached 请求循环或缓存踩踏

    python - get 上的 Redis 通配符键

    redis - redis vs memcached vs levelDB用例

    azure - 无法部署 Azure Function 应用设置,因为文件共享返回 403

    spring - 如何将 JPA DAO 迁移到具有二级缓存的 Spring Data?

    android - JSON 中的最后一张图片未显示

    java - Tomcat 缓存单点登录系统的旧 dns 条目

    node.js - 有人可以提供一个我需要使用 socket.io-redis 的示例情况吗?

    kubernetes - 超时尝试为检查点作业启动 flink 作业主机

    elasticsearch - Elasticsearch 7.3 Rest客户端是否发现新节点?