简单的使用Ehcache

缓存清除策略,官方文档给出的有

 

  1. LRU - least recently used(最近最少使用)
  2. LFU - least frequently used(最不经常使用)
  3. FIFO - first in first out, the oldest element by creation time(清除最早缓存的数据,不关心是否经常使用)

1实体要序列化

public class User implements Serializable

{

    private static final long serialVersionUID = 3681423205727147793L;

 

2、配置ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 

  <!-- updateCheck 属性默认为true updateCheck 表示项目启动后,  HTTP  请求  ehcache  官方检查是否要更新 --> 

<ehcache updateCheck="false">   

     <diskStore path="java.io.tempdi" />      

    <defaultCache maxElementsInMemory="10000"  memoryStoreEvictionPolicy="LRU"   eternal="false"    timeToIdleSeconds="1"  timeToLiveSeconds="5"  overflowToDisk="false"   diskPersistent="false" />  

    <!-- 测试 -->   <!-- name:缓存名称 --> 

    <cache name="ehcacheGO" memoryStoreEvictionPolicy="LRU"  maxElementsInMemory="1"  eternal="false"   timeToIdleSeconds="7200"   timeToLiveSeconds="7200"     overflowToDisk="true" />  

</ehcache>

(1) defaultCache属性的作用

  1.  maxElementsInMemory="10000" <!-- 最大内存占用,超出后缓存保存至文件 -->  
  2.  memoryStoreEvictionPolicy="LRU" <!-- 缓存废弃策略,LRU表示最少使用的优先清除,此值对应之前3种策略 -->  
  3.         eternal="false"    
  4.         timeToIdleSeconds="1" <!-- 空闲时间,超出此时间未使用缓存自动清除 -->  
  5.         timeToLiveSeconds="5" <!-- 清除时间,缓存保留的最长时间 -->  
  6.         overflowToDisk="false" <!-- 是否往硬盘写缓存数据 -->  
  7.         diskPersistent="false" 

3.建立ehcache的工具类

package com.xinyi.msrv.util;

 

import java.net.URL;

 

import com.xinyi.msrv.bean.OtherMessage;

 

import net.sf.ehcache.Cache;

import net.sf.ehcache.CacheManager;

import net.sf.ehcache.Element;

 

public class EhcacheUtil {

 //配置文件路径

private static final String path = "/ehcache.xml";

 

private URL url;

 

private CacheManager manager;

 

private static EhcacheUtil ehCache;

 

private EhcacheUtil(String path) {

url = getClass().getResource(path);

manager = CacheManager.create(url);

}

 

public static EhcacheUtil getInstance() {

if (ehCache == null) {

ehCache = new EhcacheUtil(path);

}

return ehCache;

}

 

public void put(String cacheName, String key, Object value) {

Cache cache = manager.getCache(cacheName);

Element element = new Element(key, value);

cache.put(element);

}

 

public Object get(String cacheName, String key) {

Cache cache = manager.getCache(cacheName);

Element element = cache.get(key);

return element == null ? null : element.getObjectValue();

}

 

public Cache get(String cacheName) {

return manager.getCache(cacheName);

}

 

public void remove(String cacheName, String key) {

Cache cache = manager.getCache(cacheName);

cache.remove(key);

}

 

public static void main(String[] args) {

 

System.out.println("UserController showUser");

OtherMessage message = new OtherMessage();

message.setFirst("22");

message.setKeyword1("33");

//将查询到的结果放入缓存

EhcacheUtil.getInstance().put("ehcacheGO", "userEch", message);

System.out.println("UserController showUser");

System.out.println("use cacher");

    //从缓存中取数据

OtherMessage user=(OtherMessage)EhcacheUtil.getInstance().get("ehcacheGO", "userEch");

System.out.println(user.getKeyword1());

}

 

}

4.使用ehcache

  (1)将数据存入缓存

 @RequestMapping("/showUser")
 public String toIndex(HttpServletRequest request, Model model) {
  System.out.println("UserController showUser");
  int id = Integer.parseInt(request.getParameter("id"));
  User user = userService.getUserById(id);

  //将查询到的结果放入缓存
  EhcacheUtil.getInstance().put("ehcacheGO", "userEch", user);
  model.addAttribute("user", user);
  return "showUser";
 }

 

 (2)将数据从缓存取出

  @RequestMapping("/getUser")

 public String toEhcahe(HttpServletRequest request, Model model) {
  System.out.println("use cacher");

     //从缓存中取数据
  User user=(User)EhcacheUtil.getInstance().get("ehcacheGO", "userEch");
  model.addAttribute("userCache", EhcacheUtil.getInstance().get("ehcacheGO", "userEch"));
  model.addAttribute("user", user);
  return "showUser";
  }

资料参考:https://www.cnblogs.com/austinspark-jessylu/p/6229334.html

猜你喜欢

转载自2274851504.iteye.com/blog/2422114
今日推荐