简单的使用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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值