EhCache缓存

什么时候使用缓存(空间换时间)
1.经常被大量读取很少进行更新操作的数据
2.非关键的数据(如财务数据,钱,敏感数据)
3.一些通用页面如js,css,img图片等
4.需要实时更新,但是更新频率不高的数据。比如一个用户的订单列表,他肯定希望能够实时看到自己下的订单,但是大部分用户不会频繁下单。
5.缓存数据不能大于内存(钝化)

EhCache

1.创建一个缓存管理器:
factory-method:这个方法返回的对象会变成一个Bean

applicationContext.xml

<bean id="cacheManager" class="net.sf.ehcache.CacheManager" factory-method="create"></bean> 

创建一个缓存工具类CacheUtils.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

/**
 * 操作缓存的一个工具类
 * @author Administrator
 *
 */
@Component
public class CacheUtils {
	
	@Autowired
	private CacheManager cm;

	/**
	 * 存一个东西
	 * @param key
	 * @param value
	 */
	public void put(String key,Object value){
		//拿到缓存对象
		Cache cache = cm.getCache("cacheDemo");
		//创建一个Element对象
		Element ele = new Element(key, value);
		//把对象放到缓存中去
		cache.put(ele);
	}
	
	/**
	 * <T>T:返回值是什么类型,这个泛型就是什么类型
	 */
	public <T>T get(String key){
		//拿到缓存对象
		Cache cache = cm.getCache("cacheDemo");
		Element ele = cache.get(key);
		//返回相应数据
		if(ele==null){
			return null;
		}
		return (T)ele.getObjectValue();
	}
	
	/**
	 * 移除缓存
	 */
	public void remove(){
		Cache cache = cm.getCache("cacheDemo");
		cache.removeAll();
	}
}

关键代码

/**
	 * 每一页都应该有自己的特殊的名称
	 *  第1页: jobs_1
	 *  第2页: jobs_2
	 *  第n页: jobs_n
	 */
	@Override
	public PageList<Jobs> queryAll(SqlCondition condition) {
		Integer currentPage = condition.getCurrentPage();
		String key = "jobs_"+currentPage;
		//1.从缓存中去获到相应的数据
		PageList<Jobs> pageList = cacheUtils.get(key);
		//2.如果这个数据不存在(从数据库中去查询,并且把它放到缓存中)
		if(pageList==null){
			pageList = jobsDao.queryAll(condition);
			cacheUtils.put(key, pageList);
		}
		//3.把值传回去
		return pageList;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值