【问题标题】:any benefit from using Hazelcast instead of MongoDB to store user sessions/keys?使用 Hazelcast 而不是 MongoDB 存储用户会话/密钥有什么好处?
【发布时间】:2025-11-27 18:15:03
【问题描述】:

我们正在运行 mongodb 实例以将数据存储在集合中,它没有问题,mongo 是我们的主要数据存储。

今天,我们将为产品开发 Oauth2 支持,并且必须存储用户会话(安全密钥、访问令牌等),并且访问令牌必须在定义的超时后才针对身份验证服务器进行验证这样不是每个请求都会等待身份验证服务器的验证。 对安全资源的首次请求(创建)应始终针对认证服务器进行认证。任何后续请求都将在内部进行验证(缓存)并检查内部超时,只有在过期时,才会向身份验证服务器发出另一个请求。

为了解决这个要求,我们必须引入某种分布式缓存,以存储(支持 TTL)用户会话等,基于 ttl 使其过期......我在上面写过。

这里有两个选项:

  1. 将用户会话存储在 hazelcast 中并在所有应用服务器之间共享 - 不错的选择,将所有用户会话保留在驱逐地图中。
  2. 在 MongoDb 中存储用户会话 - 并执行相同操作。

您是否看到使用 Hazelcast 而不是将临时数据存储在 Mongo 中的任何好处?您知道任何显着的性能改进吗?

我是 Hazelcast 的新手,所以不了解所有杀手级功能。

【问题讨论】:

标签: java spring mongodb caching hazelcast


【解决方案1】:

Hazelcast 是一个内存网格,因此在这种情况下它应该比 MongoDB 快得多。如果您不想自己创建,他们还为 Java servlet 提供了预制的会话集群代码。

会话集群代码here on github。或在这里Maven artifact

【讨论】:

    【解决方案2】:

    免责声明:我是 Hazelcast 的创始人...

    1. Hazelcast 更简单,简单性也很重要。
    2. 您可以将 Hazelcast 嵌入到您的应用程序中(如果您的应用程序是 用Java编写)。无需部署和维护远程nosql 簇。
    3. Hazelcast 直接与您的应用程序对象一起工作。不 JSON 或任何其他格式。写入和读取 java 对象。
    4. 您可以 对内存中的数据执行 Java 代码。无需获取和 处理数据;将您的代码发送到数据。
    5. 你可以听 您的数据的更新。 “当这张地图或钥匙出现时通知我 更新”。
    6. Hazelcast 具有丰富的数据结构集,如队列、 主题、信号量、锁、多图等。想象一下共享一个队列 跨多个节点并能够进行阻塞队列轮询/获取 操作...这真的很酷:)

    【讨论】:

    • 谢谢,这是我想听到的 :) 说服了我。
    • 请确保您在将来插入您的产品时披露您的隶属关系。有关详细信息,请参阅*.com/help/promotion
    • 我对功能 #3 很感兴趣。任何人都可以分享一个链接到一个很好的教程,教如何使用内存中的对象格式?
    • @Zhongjun'Mark'Jin,我可能有点晚了,但是对于任何想要一个好的教程的人,如果你订阅了 Pluralsight,请查看 Grant Little 的课程,免责声明 :: 我没办法与 Grant little 或 Pluralsight 相关