CMS-Day06
缓存
一、缓存的实现方式
EhCache/Memcached/Redis(用得多)
二、缓存的使用场景:
1.经常读取,很少修改的
2.允许出现无效数据(敏感数据不能用缓存,财务,银行)
3.缓存数据不能大于内存(钝化)
三、缓存实现
1、导入jar
2、 XML配置文件:ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="C:/ehcache"/>
<cache
name="demoCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
- 在applicationConetext.xml中配置
<!-- 配置一个缓存管理对象
在bean中配置了factory—method,会调用对应的方法,
-->
<bean id="cacheManager" class="net.sf.ehcache.CacheManager" factory-method="create"></bean>
3、缓存工具类
package cn.itsource.cms.util;
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;
/**
*缓存工具类
*
*/
@Component
public class CacheUtils {
@Autowired
private CacheManager cm;
/**
* 存
*/
public void put(String key,Object value){
Cache cache = cm.getCache("categoryCache");
Element ele = new Element(key, value);
cache.put(ele);
}
/**
*取
*/
public <T>T get(String key){
Cache cache = cm.getCache("categoryCache");
return (T)cache.get(key).getObjectValue();
}
/**
* 移除缓存
*/
public void remove(){
Cache cache = cm.getCache("cacheDemo");
cache.removeAll();
}
}
4、如在查询中使用
/**
* 每一页都应该有自己的特殊的名称
* 第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;
}