转载请注明出处哈:http://carlosfu.iteye.com/blog/2237511
一、依赖
1. ehcache依赖
<ehcache.version>2.6.11</ehcache.version> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>${ehcache.version}</version> </dependency>
2. ehcache依赖树: mvn dependency:tree
[INFO] \- net.sf.ehcache:ehcache-core:jar:2.6.11:compile [INFO] \- org.slf4j:slf4j-api:jar:1.7.5:compile
3. 由于slf4j-api是日志接口,加入具体实现logback(log4j也可以)
<logback.version>1.0.13</logback.version> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency>
4. 为了方便单元测试,引入junit
<junit.version>4.11</junit.version> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency>
最终pom:
<properties> <ehcache.version>2.6.11</ehcache.version> <logback.version>1.0.13</logback.version> <junit.version>4.11</junit.version> </properties> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>${ehcache.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
二、ehcache配置
注意:如果不添加,会使用ehcache-core-2.6.11.jar下的ehcache-failsafe.xml作为默认配置
一般来说需要把ehcache.xml放到classpath下:我们使用极简配置
<?xml version="1.0" encoding="UTF-8" ?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> <cache name="firstEhcache" maxElementsInMemory="10000"> </cache> </ehcache>
三、logback配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="5 seconds"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
四、单元测试
1. 一个实体类:
package com.sohu.tv.ehcache.first; import java.util.Date; /** * 俱乐部 * * @author leifu * @Date 2015年7月28日 * @Time 下午1:43:53 */ public class Club { /** * 俱乐部id */ private int id; /** * 俱乐部名 */ private String clubName; /** * 俱乐部描述 */ private String clubInfo; /** * 创建日期 */ private Date createDate; /** * 排名 */ private int rank; public Club(int id, String clubName, String clubInfo, Date createDate, int rank) { super(); this.id = id; this.clubName = clubName; this.clubInfo = clubInfo; this.createDate = createDate; this.rank = rank; } public Club() { super(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getClubName() { return clubName; } public void setClubName(String clubName) { this.clubName = clubName; } public String getClubInfo() { return clubInfo; } public void setClubInfo(String clubInfo) { this.clubInfo = clubInfo; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public int getRank() { return rank; } public void setRank(int rank) { this.rank = rank; } @Override public String toString() { return "Club [id=" + id + ", clubName=" + clubName + ", clubInfo=" + clubInfo + ", createDate=" + createDate + ", rank=" + rank + "]"; } }
2. 单元测试:
package com.sohu.tv.ehcache.first; import java.util.Date; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; /** * 第一个ehcache测试 * * @author leifu * @Date 2015年8月12日 * @Time 上午10:14:13 */ public class FirstEhcacheTest { private static Logger logger = LoggerFactory.getLogger(FirstEhcacheTest.class); private static Cache cache; @BeforeClass public static void setUp() { CacheManager cacheManager = CacheManager.create(FirstEhcacheTest.class.getClassLoader().getResourceAsStream("ehcache.xml")); // 打印cacheManager管理的cache String[] cacheNameArr = cacheManager.getCacheNames(); for (String cacheName : cacheNameArr) { logger.info("cacheName: {}", cacheName); } cache = cacheManager.getCache("firstEhcache"); } @Test public void testCRUD() { logger.info("At start, ehcache object size: {}", cache.getSize()); // 唯一key String key = "football:club:1"; Club club = new Club(1, "AC", "AC米兰", new Date(), 1); // 增 Element element = new Element(key, club); cache.put(element); logger.info("after add ehcache object size: {}", cache.getSize()); // 查 Element elementResult = cache.get(key); Club clubResult = (Club) elementResult.getObjectValue(); logger.info("get key {} value is {}", key, clubResult.toString()); // 修改 club.setRank(8888); cache.put(element); logger.info("after set ehcache object size: {}", cache.getSize()); // 再查 Element elementResultAgain = cache.get(key); Club clubResultAgain = (Club) elementResultAgain.getObjectValue(); logger.info("get key {} again value is {}", key, clubResultAgain.toString()); // 删 boolean removeResult = cache.remove(key); logger.info("remove result is {}, after remove ehcache object size: {}", removeResult, cache.getSize()); // 增加一条,观察下次启动 cache.put(element); logger.info("At final, ehcache object size: " + cache.getSize()); // 生产环境不要使用,影响性能 logger.info("At final, ehcache memory size: " + cache.calculateInMemorySize()); } }
五、输出:
10:43:11.405 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - cacheName: firstEhcache 10:43:11.410 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - At start, ehcache object size: 0 10:43:11.413 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - after add ehcache object size: 1 10:43:11.416 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - get key football:club:1 value is Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Wed Aug 12 10:43:11 CST 2015, rank=1] 10:43:11.416 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - after set ehcache object size: 1 10:43:11.417 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - get key football:club:1 again value is Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Wed Aug 12 10:43:11 CST 2015, rank=8888] 10:43:11.417 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - remove result is true, after remove ehcache object size: 0 10:43:11.417 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - At final, ehcache object size: 1 10:43:11.418 [main] INFO c.s.t.ehcache.first.FirstEhcacheTest - At final, ehcache memory size: 1
六、结论、注意、猜想:
1. 如果没有配置diskStore作为持久化数据源,每次启动时候ehcache都是空的(因为ehcache是进程内缓存,会伴随着JVM的结束而消失)
2. ehcache接口中 put代表了add和set。
3. 官方文档中说:cache.calculateInMemorySize()这个方法不要在生产环境中使用,会影响性能。
4. Ehcache的增删改查API使用十分简单。
相关推荐
Ehcache 2.x系列是其历史上的一个稳定版本,支持多种缓存策略,包括LRU(Least Recently Used)和LFU(Least Frequently Used)等,用于自动清理不常访问的数据。此外,Ehcache支持分布式缓存,可以在多台服务器之间...
Ehcache 2.10.8是该产品的特定版本,它包含了针对缓存管理和优化的一系列特性和改进。在bigmemory-max-4.3.8.4.2.tar.gz这个压缩包中,我们可以找到与Ehcache 2.10.8相关的所有组件和配置文件。 1. Ehcache的核心...
赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-...
hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate-search-4.2.0.Final.jar hibernate-search-analyzers-4.2.0.Final.jar hibernate-...
赠送jar包:ehcache-core-2.6.11.jar; 赠送原API文档:ehcache-core-2.6.11-javadoc.jar; 赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档...
该包是hibernate中所用的一个包,专门用来去处理特定的问题,它是和ehcache一起用的一个包
ehcache缓存jar(ehcache-core-2.4.6.jar+ehcache-web-2.0.4.jar)
mybatis-ehcache-1.0.2.jar META-INF/LICENSE META-INF/MANIFEST.MF META-INF/NOTICE META-INF/maven/org.mybatis.caches/mybatis-ehcache/pom.properties META-INF/maven/org.mybatis.caches/mybatis-ehcache/pom....
ehcache-core-2.6.10.jar依赖包 MyBatiesEhCache二级缓存 Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个...
jar包,官方版本,自测可用
hibernate-ehcache-4.1.0.Final.jar 是hibernate4.1使用缓存的jar包
"ehcache-core-2.4.5.jar"是Ehcache的核心库,该版本为2.4.5,包含Ehcache的基本功能和API。在使用这个版本的Ehcache时,需要额外引入两个SLF4J(Simple Logging Facade for Java)的依赖,分别是"slf4j-api-1.6.1....
2. 缺少必需的元素或属性:如果Schema定义了某些元素或属性是必需的,但在文档中没有出现,也会引发这个错误。 3. 额外的元素或属性:如果XML文档包含了Schema中未定义或者不允许的元素或属性,也会导致这个错误。 4...
cas-client-support-distributed-ehcache-3.2.0.jar
hibernate-ehcache-3.3.2.GA.jar
- 使用二级缓存提高性能,如EhCache集成。 - 合理设计实体关系,避免N+1查询问题。 - 使用批处理更新和插入,减少数据库交互次数。 通过以上分析,我们可以看出`hibernate-core-5.0.11.Final.jar`在ORM中的重要地位...
标题"ehcache-2.7.3-distribution.tar.gz"表明这是一个包含EHCache 2.7.3版本的发行版压缩包,格式为tar.gz,这是一种常见的Linux/Unix系统中用于打包和压缩文件的格式。这个版本的EHCache是Java缓存系统的一个版本...
接下来,"ehcache-2.7.0-distribution.tar.gz"是Ehcache的一个后续版本,通常包含更多的改进和新特性。比如,2.7.0可能会引入了更强大的缓存分区策略,支持多级缓存,增强了缓存复制和同步机制,以及更好的监控和...
1.解压缩到目录下,复制ehcache-monitor-kit-1.0.0\lib\ehcache-probe-1.0.0.jar包到application的web-inf/lib目录下 2.将以下配置copy的ehcache.xml文件的ehcache标签中,注:上述链接中说的配置少写了个probe包名...
ehcache-core-2.5.2.jar ehcache-spring-annotations-1.2.0.jar guava-13.0.1.jar ehcache-terracotta-2.5.2.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar terracotta-toolkit-1.5-runtime-4.2.0.jar