在 Hazelcast 5.0 版中,Cache 和 Map 之间的正式区别是什么?
What is the formal difference between a Cache and Map in version 5.0 of Hazelcast?
第一次在一套web API中实现Hazelcast时,Map和Cache的使用不一致
例如,使用 SpringCacheManager 创建缓存会导致创建映射
var sCache = springCacheManager.getCache("testCache");
sCache.putIfAbsent("test", "test2");
但是,使用 CachingProvider CacheManager 创建缓存会导致创建必须打开和关闭的实际缓存(根据文档)
try (var cache = Caching.getCachingProvider().getCacheManager(null, null,
HazelcastCachingProvider.propertiesByInstanceName("hazelcache")).createCache("actualCache", config)) {
cache.putIfAbsent("test", "test");
}
另一个例子,使用@Cacheable 注释将创建一个地图,即使文档概述了缓存的用法。以下代码将使用 hazelcast 中的 Map 成功 return 第一个计算值。从不使用缓存。
@Cacheable(value = "counter")
public Boolean test(Integer addTo) {
counter += addTo;
return counter % 2 != 0;
}
在 Hazelcast 中是否有缓存与映射的正式定义?两者都可用于同一目的吗?
下图包含一个测试 Hazelcast 管理中心的视图,其中显示了上述组件,即映射和缓存。这些都是由同一个客户端生成的。
测试
这里有Cache、SpringCache和Map可以考虑.
对于 Cache,Hazelcast 是 Java 缓存标准 JSR107 的实施提供者。
这些在管理中心上显示为“Cache”,如果您 运行 hazelcastInstance.getDistributedObjects()
它们将是 ICache
类型。它在 Hazelcast 文档中 here.
对于Map,Hazelcast 提供了一种数据结构IMap
,它主要是java.util.Map
的超集。这些在管理中心显示为“Map”。
Spring也提供了缓存,对于JSR107或者直接用Hazelcast可以设置CacheType,或者允许Spring来pick。当 Spring 直接使用 Hazelcast 时,它将使用 IMap
而不是 ICache
进行存储。
如果您选择 JCache 或配置 Spring 以使用 JCache,那么您将获得符合标准的行为。你有缓存,并且可以轻松地将缓存提供程序从 Hazelcast 交换到其他你想要的东西。
Map 为您提供 executeOnKey 等操作,以在原位更新一个或多个条目。如果条目是一个复合对象,但有一小部分发生了变化,这可能是一种比发送整个值更有效的更新方式。
第一次在一套web API中实现Hazelcast时,Map和Cache的使用不一致
例如,使用 SpringCacheManager 创建缓存会导致创建映射
var sCache = springCacheManager.getCache("testCache");
sCache.putIfAbsent("test", "test2");
但是,使用 CachingProvider CacheManager 创建缓存会导致创建必须打开和关闭的实际缓存(根据文档)
try (var cache = Caching.getCachingProvider().getCacheManager(null, null,
HazelcastCachingProvider.propertiesByInstanceName("hazelcache")).createCache("actualCache", config)) {
cache.putIfAbsent("test", "test");
}
另一个例子,使用@Cacheable 注释将创建一个地图,即使文档概述了缓存的用法。以下代码将使用 hazelcast 中的 Map 成功 return 第一个计算值。从不使用缓存。
@Cacheable(value = "counter")
public Boolean test(Integer addTo) {
counter += addTo;
return counter % 2 != 0;
}
在 Hazelcast 中是否有缓存与映射的正式定义?两者都可用于同一目的吗?
下图包含一个测试 Hazelcast 管理中心的视图,其中显示了上述组件,即映射和缓存。这些都是由同一个客户端生成的。
测试
这里有Cache、SpringCache和Map可以考虑.
对于 Cache,Hazelcast 是 Java 缓存标准 JSR107 的实施提供者。
这些在管理中心上显示为“Cache”,如果您 运行 hazelcastInstance.getDistributedObjects()
它们将是 ICache
类型。它在 Hazelcast 文档中 here.
对于Map,Hazelcast 提供了一种数据结构IMap
,它主要是java.util.Map
的超集。这些在管理中心显示为“Map”。
Spring也提供了缓存,对于JSR107或者直接用Hazelcast可以设置CacheType,或者允许Spring来pick。当 Spring 直接使用 Hazelcast 时,它将使用 IMap
而不是 ICache
进行存储。
如果您选择 JCache 或配置 Spring 以使用 JCache,那么您将获得符合标准的行为。你有缓存,并且可以轻松地将缓存提供程序从 Hazelcast 交换到其他你想要的东西。
Map 为您提供 executeOnKey 等操作,以在原位更新一个或多个条目。如果条目是一个复合对象,但有一小部分发生了变化,这可能是一种比发送整个值更有效的更新方式。