2.3. 无效的缓存
Data Grid 中的无效缓存模式旨在优化对共享持久数据存储执行大量读取操作的系统。您可以使用 invalidation 模式来减少在状态发生变化时数据库写入的数量。
对于 Data Grid 远程部署,无效缓存模式已弃用。使用带有存储在共享缓存存储中的嵌入式缓存模式的 invalidation 缓存模式。
只有在您具有持久性数据存储(如数据库)且仅在 read-heavy 系统中使用 Data Grid 优化时,无效缓存模式才会生效。
当为无效配置缓存时,缓存中的每个数据更改都会触发对集群中其他缓存的消息,通知它们的数据现在已过时,应该从内存中删除。validation 消息从其他节点的内存中删除过时的值。与复制整个值相比,消息非常小,并且集群中的其他缓存会以 lazy 方法查找修改的数据,仅在需要时才会查找修改的数据。对共享存储的更新通常由用户应用程序代码或 Hibernate 处理。
图 2.5. 无效的缓存
有时,应用会从外部存储中读取值,并希望将其写入本地缓存,而无需将其从其他节点中删除。要做到这一点,它必须调用 Cache.putForExternalRead (key, value)
而不是 Cache.put (key, value)
。
invalidation 模式仅适用于所有节点可以访问同一数据的共享存储。在没有持久性存储的情况下使用 invalidation 模式是不切实际的,因为更新的值需要从共享存储中读取,以实现跨节点的一致性。
切勿将无效模式与本地非共享缓存存储一起使用。invalidation 消息不会删除本地存储中的条目,一些节点会保持过时的值。
无效的缓存也可以使用特殊的缓存加载程序 ClusterLoader
进行配置。启用 ClusterLoader
时,在本地节点上找不到密钥的读取操作将首先从所有其他节点请求,并将其保存在本地内存中。这可能会导致存储过时的值,因此只有在您对过时的值具有高容错时才使用它。
同步或异步复制
当同步时,写入操作块直到集群中的所有节点都被驱除了 stale 值。当异步时,原始器会广播失效消息,但不会等待响应。这意味着,其他节点仍然会在原始器的写入完成后看到一个过时的值。
Transactions
事务可用于批处理失效消息。事务在主所有者上获取密钥锁定。
使用 pesimistic locking 时,每个写入都会触发锁定消息,该消息会广播到所有节点。在事务提交过程中,原始器广播一个单阶段准备消息(可选)准备消息(可选)使所有受影响的密钥和释放锁无效。
使用最佳锁定时,源器广播准备消息、提交消息和解锁消息(可选)。第一阶段准备或解锁消息为 fire-and-forget,最后一条消息始终释放锁。