ehcache3的使用

springboot使用

启动类@EnableCaching

方法使用

@Cacheable(cacheNames = "empCache",key = "#id")

钩子实现:

c 复制代码
@EnableCaching
@Configuration
public class CacheConfig {
    /**
     * 配置缓存 
     */
    @Bean
    public CustomerCache redisCache(){
        CustomerCache cache = new CustomerCache ();
        cache.setName("abcCache");
        return cache;
    }
    /**
     * 缓存CacheManager 管理
     */
    @Bean
    public SimpleCacheManager cacheManager(CustomerCache cache){
        Set<Cache> cacheSet = new HashSet<>();
        cacheSet.add(cache);
        SimpleCacheManager manager = new SimpleCacheManager();
        manager.setCaches(cacheSet);
        return manager;
    }
}
    
public class CustomerCache implements org.springframework.cache.Cache {
	void evict(Object key);
	void put(Object key, @Nullable Object value);
	<T> T get(Object key, Callable<T> valueLoader);

}

加载

go 复制代码
URL url = this.getClass().getClassLoader().getResource("ehcache3.xml");
    XmlConfiguration xmlConfiguration = new XmlConfiguration(url);
    CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfiguration);
    cacheManager.init();
 
c 复制代码
Cache<Integer, String> myCache = cacheManager.getCache("abcCache", String.class, EhcacheData.class);
myCache.get("")

xml配置

java 复制代码
<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="D:\temp"/>

	<cache alias="abcCache">
		<key-type>java.lang.String</key-type>
		<value-type>com.util.EhcacheData</value-type>
		<expiry>
			<!-- 过期策略有三种: 不配置expiry不过期;TTL:指定条目的存活时间; TTI:条目在指定时间段内未被使用,则过期-->
			<tti unit="minutes">60</tti>
		</expiry>
		<resources>
			<!--最多在堆中有多少个条目数,默认只存放在堆内存,未设置默认使用应用的设置-->
			<heap unit="entries">6000</heap>
			<!-- <heap unit="MB">10</heap> -->
            <offheap unit="MB">50</offheap>
            <disk persistent="true" unit="MB">500</disk>
		</resources>
	</cache>
</config>

1、过期策略不直接参与控制内存的使用,仍有可能会超出配置的条目上限或者内存上限。

2、若缓存条目数或者缓存总量达到配置上限后,则按照默认的缓存淘汰策略LRU(移除最近最少使用)

3、若过期策略是TTL(指定条目存活时间),如果一个条目在其TTL内未被再次访问,它会在达到TTL后从缓存中自动删除。当达到缓存配置上限后,即使条目尚未达到其TTL,如果需要释放内存,它可能会被移除;

如果一个条目在TTL期间被频繁访问,即使超过了LRU限制,它也会被保留在缓存中,直到TTL到期或被新的条目替换,这种情况下会超出配置的条目上限或者内存上限。

4、若过期策略是TTI(条目在指定时间段内未被使用),

满足TTI条件从缓存中自动删除。当达到缓存配置上限后,需要释放内存,条目因频繁被访问从而避免了因TTI过期而被移除,会一直占用缓存空间,这中情况下会超出配置的条目上限或者内存上限

5、若过期策略不配置,表示不过期,当达到缓存配置上限后,默认使用LRU删除过多的缓存条目

淘汰策略:

FIFO(First In First Out):先进先出

LFU(Least Frequently Used):最少使用,使用次数最少的条目将被清理

LRU(Least Recenly Used):最近最少使用,最近一段时间内使用次数最少的条目将被清理

xml配置详解
参数
persistence
directory 数据存储目录
cache
alias 缓存组名
key-type 缓存 key 的类型,比如 java.lang.String
value-type 缓存 value 的类型,一般自定义对象,对象有个Object data变量
expiry 缓存过期策略
tti 条目在指定时间段内未被使用
unit 单位,nanos、micros、millis、seconds、minutes、hours、days
ttl 指定条目存活时间
unit 单位,nanos、micros、millis、seconds、minutes、hours、days
resources 资源配置
heap 堆内存配置
unit 单位,默认entries条目总数,B、KB、MB、GB、TB、PB
offheap 堆外内存配置
unit 单位,默认entries条目总数,B、KB、MB、GB、TB、PB
disk 磁盘配置
persistence 是否持久化,默认false
unit 单位,B、KB、MB、GB、TB、PB
相关推荐
2301_7807896614 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设15 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn15 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川16 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵16 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David16 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10016 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin17 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质17 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain37618 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis