我正在试验使用Hazelcast作为Hibernate的二级缓存。我不知道该在哪里指定缓存配置。我在Hazelcast XML中添加了以下内容:
<map name="com.blah.entity.*">
<backup-count>1</backup-count>
<time-to-live-seconds>3600</time-to-live-seconds>
<max-idle-seconds>600</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="PER_NODE">5</max-size>
<eviction-percentage>25</eviction-percentage>
<near-cache>
<max-size>5</max-size>
<time-to-live-seconds>3600</time-to-live-seconds>
<max-idle-seconds>600</max-idle-seconds>
<eviction-policy>LRU</eviction-policy>
<invalidate-on-change>true</invalidate-on-change>
</near-cache>
</map>但是,当我使用JVisualVM (带有JMX插件)查看MBean地图时,我看到地图的大小是21 (这比我最大的大小5)大。
MBean上的映射'config‘属性显示了我的配置已被应用:
MapConfig{name='com.blah.entity.*',
inMemoryFormat=BINARY',
backupCount=1,
asyncBackupCount=0,
timeToLiveSeconds=3600,
maxIdleSeconds=600,
evictionPolicy='LRU',
evictionPercentage=25,
maxSizeConfig=MaxSizeConfig{maxSizePolicy='PER_NODE',
size=5},
readBackupData=false,
nearCacheConfig=NearCacheConfig{timeToLiveSeconds=3600,
maxSize=5,
evictionPolicy='LRU',
maxIdleSeconds=600,
invalidateOnChange=true,
inMemoryFormat=BINARY,
cacheLocalEntries=false},
mapStoreConfig=null,
mergePolicyConfig='com.hazelcast.map.merge.PutIfAbsentMapMergePolicy',
wanReplicationRef=null,
listenerConfigs=[],
mapIndexConfigs=[]}我是在配置中做错了什么,还是误读了JMX数据?
编辑
为了消除任何混乱,文献资料说:
Hazelcast为每个Hibernate缓存区域创建一个单独的分布式映射。因此,可以通过Hazelcast地图配置轻松地配置这些区域。您可以定义备份、驱逐、TTL和近缓存属性。
我希望在映射中为我的实体设置缓存区域的max属性,因为我不希望缓存不受限制地展开。
发布于 2014-08-07 06:31:30
事实证明,我的配置是正确的,但是在通配符配置的Hazelcast 3.2.1-3.2.4中有一个错误
问题是映射名称中的通配符:<map name="com.blah.entity.*"> --如果我为映射使用一个完全限定的名称,例如com.blah.entity.User,则映射配置将被正确提取。我使用JMX验证了映射配置应用于缓存的正确性。
我已经得到保证,这个问题将在黑泽尔广播3.3中得到解决。
发布于 2014-07-21 06:50:32
在Hibernate配置hibernate.cache.hazelcast.configuration_file_path中使用以下属性指定配置路径。
https://stackoverflow.com/questions/24859003
复制相似问题