作者:冬瓜 | 来源:互联网 | 2023-09-13 17:38
EhCache简介Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,JavaEE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异
EhCache 简介
Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
主要特点:
- 快速
- 简单
- 多种缓存策略
- 缓存数据有两级:内存和磁盘,因此无需担心容量问题
- 缓存数据会在虚拟机重启的过程中写入磁盘
- 可以通过RMI、可插入API等方式进行分布式缓存
- 具有缓存和缓存管理器的侦听接口
- 支持多缓存管理器实例,以及一个实例的多个缓存区域
- 提供Hibernate的缓存实现
ehcache 和 redis 比较
ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
redis是通过socket访问到缓存服务,效率比Ehcache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。
ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。
SpringBoot 中整合Ehcache
第一步 在pom.xml 中引入依赖
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.6</version></dependency>
第二步 在src/main/resources下新建配置文件ehcache.xml
<ehcache xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance" updateCheck&#61;"false"><diskStore path&#61;"java.io.tmpdir"/><cache name&#61;"ehcache001"maxEntriesLocalHeap&#61;"10000"maxEntriesLocalDisk&#61;"1000"eternal&#61;"false"overflowToDisk&#61;"true"diskSpoolBufferSizeMB&#61;"20"timeToIdleSeconds&#61;"300"timeToLiveSeconds&#61;"600"memoryStoreEvictionPolicy&#61;"LFU"transactionalMode&#61;"off" />
ehcache>
下面给大家贴出一个工具类
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;import java.net.URL;public class EhCacheUtil {private static final String path &#61; "/ehcache.xml";private URL url;private CacheManager manager;private static EhCacheUtil ehCache;private EhCacheUtil(String path) {url &#61; getClass().getResource(path);manager &#61; CacheManager.create(url);}public static EhCacheUtil getInstance() {if (ehCache &#61;&#61; null) {ehCache &#61; new EhCacheUtil(path);}return ehCache;}public void put(String cacheName, String key, Object value) {Cache cache &#61; manager.getCache(cacheName);Element element &#61; new Element(key, value);cache.put(element);}public Object get(String cacheName, String key) {Cache cache &#61; manager.getCache(cacheName);Element element &#61; cache.get(key);return element &#61;&#61; null ? null : element.getObjectValue();}public Cache get(String cacheName) {return manager.getCache(cacheName);}public void remove(String cacheName, String key) {Cache cache &#61; manager.getCache(cacheName);cache.remove(key);}
}
然后给大家提出实例代码&#xff0c;这个代码仅供参考
Object o &#61; EhCacheUtil.getInstance().get("ehcache001", "captcha");if(o!&#61;null){EhCacheUtil.getInstance().put("ehcache001","captcha",o.toString()&#43;","&#43;text);}else{EhCacheUtil.getInstance().put("ehcache001","captcha",此处写存入的内容);}Object kaptcha &#61; EhCacheUtil.getInstance().get("ehcache001", "captcha");
这里给分享一个不错的博客&#xff1a;https://www.cnblogs.com/myseries/p/11370109.html 写的很详细&#xff0c;好东西就要分享出来