1. 添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.9.9</version>
</dependency>
2. xml文件配置
<config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">
<!-- 磁盘存储路径 -->
<persistence directory="./ehcacheData"/>
<!-- 管理 -->
<cache alias="jushuitan">
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<!-- 过期时间,去掉此标签则不过期 -->
<expiry>
<!-- 缓存存活时间 -->
<ttl unit="days">29</ttl>
<!-- 缓存的空闲时间,无法和ttl并存 -->
<!-- <tti unit="seconds">2</tti> -->
</expiry>
<resources>
<!-- 堆外内存,限制1024MB -->
<offheap unit="MB">1024</offheap>
</resources>
</cache>
<!-- 用于otherCache的管理 -->
<cache alias="otherCache">
<key-type>java.lang.String</key-type>
<value-type>com.stc.login.model.userTokenCacheInfo</value-type>
<expiry>
<ttl unit="seconds">30</ttl>
</expiry>
<resources>
<!-- 堆内存的大小限制为2个条目 -->
<heap unit="entries">2</heap>
<!-- 堆外内存的大小限制为10MB -->
<offheap unit="MB">10</offheap>
<!-- 磁盘缓存 persistent属性用于指定磁盘缓存是否持久化 -->
<disk unit="MB" persistent="false">20</disk>
</resources>
</cache>
</config>
/**
* xml配置方式
*
* @return /
*/
@Bean(name = "ehcacheManager")
public CacheManager s() {
URL url = getClass().getResource("/ehcache.xml");
assert url != null;
XmlConfiguration xmlConfiguration = new XmlConfiguration(url);
CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfiguration);
cacheManager.init();
return cacheManager;
}
3.编程配置
@Configuration
public class EhcacheConfig {
/**
* 编程方式
*
* @return /
*/
@Bean(name = "ehcacheManager")
public CacheManager cacheManager() {
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.withCache("cacheName1",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.offheap(1, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true))).build();
cacheManager.init();
return cacheManager;
}
}
4. 工具使用
@Component
public class EhcacheUtil implements InitializingBean{
@Resource(name = "ehcacheManager")
private CacheManager cacheManager;
private Cache<String, String> cache;
public void put(String k, String v) {
cache.put(k, v);
}
public String get(String k) {
return cache.get(k);
}
public void remove(String k) {
cache.remove(k);
}
public Boolean containsKey(String k) {
return cache.containsKey(k);
}
@Override
public void afterPropertiesSet() throws Exception {
this.cache = cacheManager.getCache("payment", String.class, String.class);
}
}
5. 缓存模型
- heap :堆上存储-利用Java的堆上RAM内存来存储缓存条目。
- off-heap: 堆外内存-大小仅受可用RAM限制,不受Java垃圾回收(GC)的约束。
- disk:利用磁盘(文件系统)存储缓存条目。
- clustered:群集存储-该数据存储是远程服务器上的缓存。
可能出现的组合
- heap + offheap
- heap + offheap + disk
- heap + offheap + clustered
- heap + disk
- heap + clustered
6. spring自动配置使用
- application.yml文件
spring:
cache:
type: jcache
jcache:
config: classpath:ehcache.xml
# ehcache3用jcache
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0.0</version>
</dependency>
- 自动使用
在完成 Ehcache 的配置后,就可以在 Spring Boot 中使用 Ehcache 缓存了。Spring Boot 提供了 @Cacheable、@CachePut、@CacheEvict 等注解来简化缓存操作;
- 手动使用
@Autowired private CacheManager cacheManager;