定义缓存策略
infinispan-config.xml
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:4.2 http://www.infinispan.org/schemas/infinispan-config-4.2.xsd" xmlns="urn:infinispan:config:4.2"> <namedCache name="xml-configured-cache"> <eviction strategy="LRU" maxEntries="200" /> <!-- lifespan:存活时间. maxIdle:最大空闲时间 --> <expiration lifespan="300000" maxIdle="120000" /> </namedCache> </infinispan>
定义缓存模型
package org.snailteam.cache;
import java.util.Map;
public interface CacheManager {
void evict(Object key);
Object put(Object key, Object value);
Object putIfAbsent(Object key, Object value);
void putAll(Map<Object, Object> map);
boolean replace(Object key, Object oldValue, Object value);
Object get(Object key);
}
定义缓存模型的实现
package org.sanilteam.cache; import java.util.Map; import org.infinispan.Cache; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class InfinispanCacheManager implements CacheManager { private Logger logger = LoggerFactory.getLogger(InfinispanCacheManager.class); private EmbeddedCacheManager embeddedCacheManager; private Cache<Object, Object> cache; private String configurationFile; public String getConfigurationFile() { return configurationFile; } public void setConfigurationFile(String configurationFile) { this.configurationFile = configurationFile; } public void setEmbeddedCacheManager(EmbeddedCacheManager embeddedCacheManager) { this.embeddedCacheManager = embeddedCacheManager; } public InfinispanCacheManager() { // only used for junit test } public void init() throws Exception{ if (cache == null) { embeddedCacheManager = new DefaultCacheManager(configurationFile); cache = embeddedCacheManager.getCache("xml-configured-cache"); logger.info(cache.getConfiguration().getCacheModeString()); } } public void destroy(){ if(cache!=null){ cache.stop(); embeddedCacheManager.stop(); } } public Cache<Object, Object> getCache() { return cache; } @Override public void evict(Object key) { getCache().evict(key); } @Override public Object put(Object key, Object value) { return getCache().put(key, value); } @Override public Object putIfAbsent(Object key, Object value) { return getCache().putIfAbsent(key, value); } @Override public void putAll(Map<Object, Object> map) { getCache().putAll(map); } @Override public boolean replace(Object key, Object oldValue, Object newValue) { return getCache().replace(key, oldValue, newValue); } @Override public Object get(Object key) { return getCache().get(key); } }
spring管理缓存
<bean class="org.sanilteam.cache.InfinispanCacheManager" id="cacheManager" init-method="init" destroy-method="destroy"> <property name="configurationFile" value="META-INF/infinispan-config.xml" /> </bean>