我正在尝试将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插件)来查看Map MBean时,我看到地图的大小是21(大于我的最大大小5)。
MBean上的maps'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数据?
修改
为了澄清任何困惑,the documentation说明如下:
Hazelcast为每个Hibernate缓存创建一个单独的分布式映射 区域。因此,可以通过Hazelcast地图轻松配置这些区域 组态。您可以定义备份,逐出,TTL和近缓存 属性。
我想在地图上为我的实体的缓存区域设置max-size属性,因为我不希望缓存无限制地扩展。
答案 0 :(得分:0)
使用Hibernate配置hibernate.cache.hazelcast.configuration_file_path
中的以下属性指定配置的路径。
答案 1 :(得分:0)
事实证明我的配置是正确的,但Hazelcast 3.2.1 - 3.2.4中存在Wildcard Configuration
的错误问题是地图名称中的通配符:<map name="com.blah.entity.*">
如果我使用地图的完全限定名称,例如com.blah.entity.User
,正确选取地图配置。我使用JMX验证了地图配置是否正确应用于缓存。
我已经确信此问题将在Hazelcast 3.3中修复