### ehcache基础知识与实践 #### 一、ehcache简介 ehcache是一款开源的、纯Java的语言缓存框架,主要用于提高应用程序性能。它提供了一种在内存中存储对象的方法,能够帮助开发者快速实现对数据的缓存操作,从而减少对数据库等后端系统的访问频率,达到提升应用性能的目的。ehcache支持多种缓存策略,并且可以灵活配置缓存行为,适用于不同的应用场景。 #### 二、ehcache配置详解 根据给定的部分内容中的`ehcache.xml`配置示例,我们可以深入探讨其各项参数的意义及作用: 1. **`defaultCache`**:这是ehcache默认的缓存配置,当没有为特定缓存指定配置时,将使用此默认配置。 - `maxElementsInMemory`: 表示缓存在内存中的最大元素数量,此处设置为10000。 - `eternal`: 表示缓存项是否永久有效。如果设置为`true`,则不会因为过期时间而被移除,这里设置为`false`。 - `timeToIdleSeconds`/`timeToLiveSeconds`:分别表示缓存项空闲多少秒后失效(即不再被访问)和缓存项生存多少秒后失效。两者都设置为120秒。 - `overflowToDisk`: 当内存满时是否溢出到磁盘,默认是`true`,此处也是`true`。 - `diskSpoolBufferSizeMB`: 指定磁盘溢出缓冲区大小,单位为MB,设置为30MB。 - `maxElementsOnDisk`: 设置磁盘上最大的元素数量,此处为10000000。 - `diskPersistent`: 表示是否持久化,即重启JVM后缓存是否依然有效,此处为`false`。 - `diskExpiryThreadIntervalSeconds`: 清理磁盘缓存线程运行间隔时间,设置为120秒。 - `memoryStoreEvictionPolicy`: 内存缓存淘汰策略,此处使用`LRU`(最近最少使用)策略。 2. **`cache`**:定义了名为`jsArray`的缓存配置。 - `name`: 缓存名称,这里是`jsArray`。 - `maxElementsInMemory`: 缓存在内存中的最大元素数量,此处为1000。 - `eternal`: 同上,此处为`false`。 - `overflowToDisk`: 是否溢出到磁盘,这里设置为`false`。 - `timeToIdleSeconds`/`timeToLiveSeconds`: 分别设置为43200秒(即12小时)。 - `memoryStoreEvictionPolicy`: 使用`LFU`(最不频繁使用)作为内存缓存淘汰策略。 #### 三、ehcache基本操作 接下来,我们通过示例代码来了解如何使用ehcache进行基本的缓存操作: ```java import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import net.sf.ehcache.CacheManager; public class CacheExample { private static Cache cache = CacheManager.getInstance().getCache("jsArray"); // 获取缓存值 public static Object getValue(String key) { Element element = (Element) cache.get(key); if (element != null) { return element.getValue(); } else { return null; } } // 设置缓存值 public static void setValue(String key, Object obj) { // 如果键已存在,则先删除原有键值 if (cache.isKeyInCache(key)) { cache.remove(key); } // 创建新的缓存项并添加到缓存中 Element element = new Element(key, obj); cache.put(element); } } ``` #### 四、ehcache在实际项目中的应用 1. **缓存策略选择**:根据业务需求选择合适的缓存策略,例如对于热点数据或频繁读取的数据,可以采用更严格的淘汰策略如`LRU`;而对于访问频率较低的数据,可以选择`LFU`策略。 2. **缓存一致性处理**:当数据发生变化时,需要考虑如何同步更新缓存中的数据,避免出现数据不一致的情况。常见的做法包括:立即失效策略、定时失效策略、基于版本号的策略等。 3. **缓存穿透、击穿与雪崩问题**:在设计缓存系统时,还需要考虑到缓存穿透、击穿与雪崩等问题,并采取相应的措施加以预防。 通过以上内容的学习,相信初学者已经对ehcache有了初步的了解。接下来可以通过更多的实践来深入掌握ehcache的高级特性及其在复杂场景下的应用技巧。
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
<cache name="jsArray" maxElementsInMemory="1000" eternal="false"
overflowToDisk="false" timeToIdleSeconds="43200"
timeToLiveSeconds="43200" memoryStoreEvictionPolicy="LFU" />
jsArray是随意给的一个名称,。
缓存要用到3个类
import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;
import net.sf.ehcache.CacheManager;
Ehcache包中有两个类:第一个负责创建一个cache对象并return它,返回它的方法有一个参数,就是随意给的名称jsArray,在第二个类中得到该对象,并有两个方法。
public static Object getValue(String key) {
Element e = (Element) cache.get(key);
if (e != null)
return e.getValue();
else
return null;
}
public static void setValue(String key, Object obj) {
// 如果存在先删除
if (cache.isKeyInCache(key)) {
cache.remove(key);
}
// 将新的数据放进缓存
Element e = new Element(key, obj);
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Go和React的高质量企业微信私域流量管理系统 。遵守Apache2.0协议,全网唯一免费商用。企业微信、私域流量、SCRM。详细文档+优秀项目+全部资料.zip
- 基于Go和React的企业微信的开源 SCRM 系统。企微,个微,微信,聚合聊天,自动回复,加好友。详细文档+优秀项目+全部资料.zip
- 基于go语言的搜索引擎,信息检索系统详细文档+优秀项目+全部资料.zip
- 基于Go语言,Beego框架开发的简单的文章发布管理系统。详细文档+优秀项目+全部资料.zip
- 基于Go语言的轻量级高性能的分布式日志系统详细文档+优秀项目+全部资料.zip
- 基于go语言简单的用户管理系统详细文档+优秀项目+全部资料.zip
- 基于Go语言的一个秒杀系统详细文档+优秀项目+全部资料.zip
- 基于Go语言的一个简易blog系统详细文档+优秀项目+全部资料.zip
- 基于Go语言开发,具备高安全性、高性能和易扩展性的企业级内容管理系统,详细文档+优秀项目+全部资料.zip
- 基于Go语言实现的单点登录系统详细文档+优秀项目+全部资料.zip
- 基于Go语言实现的微服务电商系统详细文档+优秀项目+全部资料.zip
- 基于python和sql server2014做的商品学生信息管理系统,有界面,利用的sql server数据库详细文档+优秀项目+全部资料.zip
- 基于OWTP协议库,封装所有与openw-server钱包服务API交互方法。用于集成到go语言开发下的应用方系统。详细文档+优秀项目+全部资料.zip
- 基于Quasar和Go语言的功能全面的管理系统详细文档+优秀项目+全部资料.zip
- 基于SpringBoot 开发的员工的季度绩效考核系统详细文档+优秀项目+全部资料.zip
- 四足机器人技术发展及其应用场景概述