下面演示一款纯Java的进程内缓存框架ehcache(一般项目中我们适用于orm框架与shiro框架等,不适用于高并发分布式,可以配合redis一起使用)
添加相关依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.2</version>
</dependency>
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!-- 磁盘缓存位置 -->
<diskStore path="java.io.tmpdir/ehcache"/>
<!-- 默认缓存 -->
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxEntriesLocalDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
<!-- Test缓存 的配置-->
<cache name="TestSessionCache"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="5"
timeToLiveSeconds="5"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"/>
</ehcache>
person实体:
package com.xingsfdz.demo;
public class Person {
private String name;
private int age;
private String ads;
public Person(String name, int age, String ads) {
this.name = name;
this.age = age;
this.ads = ads;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAds() {
return ads;
}
public void setAds(String ads) {
this.ads = ads;
}
}
测试代码:
package com.xingsfdz.demo;
import org.junit.Test;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class TestCache {
@Test
public void test1() {
// 1. 创建缓存管理器
CacheManager cacheManager = CacheManager.create("./src/main/resources/ehcache.xml");
// 2. 获取缓存对象
Cache cache = cacheManager.getCache("TestSessionCache");
// 3. 创建元素
Element element = new Element("testKye", "testvalue");
// 4. 将元素添加到缓存
cache.put(element);
// 5. 获取缓存
Element value = cache.get("testKye");
System.out.println(value);
System.out.println(value.getObjectValue());
// 6. 删除元素
cache.remove("testKye");
Person p1 = new Person("张三",28,"北京");
Element pelement = new Element("zhangsan", p1);
cache.put(pelement);
Element pelement2 = cache.get("zhangsan");
System.out.println(pelement2.getObjectValue());
System.out.println(cache.getSize());
// 7. 刷新缓存
cache.flush();
// 8. 关闭缓存管理器
cacheManager.shutdown();
}
}
代码结构:
运行结果:
[ key = testKye, value=testvalue, version=1, hitCount=1, CreationTime = 1586448579407, LastAccessTime = 1586448579408 ]
testvalue
com.xingsfdz.demo.Person@27d415d9
1