概述
常见的三种缓存技术ehcache,memcache,redis。ehcache的特点是快速,轻量,memcache,redis主要用在分布式集群场景。ehcache快的原因是提供了堆栈缓存,直接存在jvm,程序直接调用。
由于不同版本的使用方式不同,本文主要讲ehcache 3.4.0使用方式。
官网:http://www.ehcache.org/
Ehcache支持的数据存储
- On-Heap Store - 利用Java的堆栈内存来存储缓存条目。该层使用与Java应用程序相同的堆内存,所有这些都必须由JVM垃圾回收器进行扫描。JVM使用的堆空间越多,应用程序性能将受到垃圾回收暂停的影响越多。这个非常快,但通常是最有限的存储资源。
- Off-Heap Store - 仅限可用的RAM限制。不受Java垃圾回收(GC)的约束。相当快,但比On-Heap Store慢,因为在存储和重新访问数据时,必须将数据移入和移出JVM堆。
- 磁盘存储 - 使用磁盘(文件系统)来存储缓存条目。这种类型的存储资源通常非常丰富,但比基于RAM的慢得多。对于使用磁盘存储的所有应用程序,建议使用快速专用磁盘来优化吞吐量。
- 群集存储 - 此数据存储是远程服务器上的缓存。远程服务器可以可选地具有提供改进的高可用性的故障切换服务器。由于集群存储由于诸如网络延迟以及建立客户端/服务器一致性等因素而带来性能损失,因此本层本质上比本地非堆存储慢。
4个级别,性能由快到慢,存储量由小到大。这里有几个注意,
On-Heap 的性能超快,但不能配置太大,会影响jvm资源回收。
Off-Heap 最大要低于服务器内存大小,同时要小于运行环境的大小,通过 -XX:MaxDirectMemorySize 参数配置。
磁盘存储,建议服务器使用SSD硬盘。
群集存储,是通过Terracotta Server 实现。
使用方式1:java 类方式
- 项目引入 ehcache-3.4.0.jar1234567891011121314151617181920212223242526public static void main(String[] args) {// 构建一个缓存管理器CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(true);// cacheManager.init();// cacheConfiguration -100个换成最大,缓存过期时间1分钟CacheConfiguration<String, String> cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class, ResourcePoolsBuilder.heap(100).offheap(100, MemoryUnit.MB)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(1, TimeUnit.MINUTES ))).build();// 根据配置创建一个缓存容器Cache<String, String> myCache = cacheManager.createCache("myCache", cacheConfiguration);myCache.put("test", "hello Ehcache");// 循环直到数据过期 否包含该keywhile (myCache.containsKey("test")) {try {System.out.println("值:" + myCache.get("test"));Thread.sleep(2000);} catch (Exception e) {e.printStackTrace();}}System.out.println("1缓存已过期");System.out.println("值:" + myCache.get("test"));//关闭cacheManager.close();}
使用方式2:xml方式
- 项目引入 ehcache-3.4.0.jar
|
|
|
|
2种方式都可以,xml配置文件比较灵活,但是要注意xml格式严格按http://www.ehcache.org/schema/ehcache-core.xsd 书写。
注意节点的顺序
key-type
value-type
expiry
eviction-advisor
loader-writer
listeners
resources OR heap
more …
其他注意事项
空间不足的话,要配置 -XX:MaxDirectMemorySize,比如tomcat -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M,默认用的-Xmx 参数。