1

在我们希望有大量并发用户的项目中,我们可以选择为每个连接的用户(会话)使用一个命名缓存,或者为所有会话状态使用一个大的命名缓存。使用一个大缓存会更复杂,因为我们需要一种灵活的机制来将数据附加到会话,但可能会更高性能。每个会话使用唯一的命名缓存的主要原因是能够通过简单地销毁命名缓存来销毁与其相关的所有数据的简单性。这预计只在内存中运行,访问率将非常低。

使用一个大缓存会提高多少性能?使用 Coherence 使用大量命名缓存实例是否被认为是“不好的做法”?简而言之,在 Coherence 中分配一个新的命名缓存需要多少开销?

4

2 回答 2

2

一般来说,与 NamedCaches 相关的最大开销是创建 MBean 以跟踪其统计信息。这些 MBean 的复制可能会消耗比预期更多的网络带宽。打开 JConsole 来查看成百上千个缓存 MBean 也很笨拙。

如果您的要求是使用多个缓存条目来存储与用户相关的数据,我将使用键关联来实现这一点。使用这种方法,您可以创建一个复合键,其中包含用户身份以及缓存条目的标识符。这种方法将强制特定用户的所有数据驻留在同一个分区上 - 因此是同一个存储成员。

然后,您可以使用它来将过滤器和条目处理器定位到关联的键 - 包括条目处理器以在用户会话到期时删除缓存条目。这将更加有效,因为它只需要一个缓存服务器来响应用户的请求,而不是要求整个集群响应销毁缓存的请求。

这些链接应该可以帮助您入门:

http://docs.oracle.com/cd/E24290_01/coh.371/e22837/api_dataaffinity.htm

http://blackbeanbag.net/wp/2010/06/06/coherence-key-howto/

于 2013-02-27T16:13:06.950 回答
0

为什么不使用 CoherenceWeb

CoherenceWeb 正是为此目的,它用于维护用户/成员的会话数据。

在 CoherenceWeb 中,它使用一个缓存来维护所有用户的会话数据,每个成员都有一个条目。

于 2013-02-27T02:07:02.153 回答