https://blog.csdn.net/sanjay_f/article/details/47372967
https://www.cnblogs.com/lic309/p/4072848.html
https://blog.csdn.net/u012373815/article/details/54564076/
Spring Boot开启缓存注解
1:Spring Boot 常用缓存配置:
@Cacheable、@CachePut、@CacheEvict 注释介绍
@Cacheable
开启缓存,将查询到的结果对象,存到缓存中,一般用在查询方法上
@Cacheable(cacheNames = {"queryNews"}) public News queryNews(long htmlid) { logger.debug(htmlid); return foreMapper.queryNews(htmlid); }
查询结果作为缓存,给缓存一个名字,如果没有默认的键,就用方法的参数作为键。
@CachePut
将添加的对象加到缓存中,一般用在插入,更新方法上
@CacheEvict
将缓存废弃,一般添加到删除方法上
@CacheEvict(cacheNames = {"queryByCategory","queryNews","backQuery","selectCount"},allEntries=true) public int delete(long htmlid) throws Exception{ int i1=manageMapper.deleteNewshtmlid(htmlid); int i2=manageMapper.deleteNewslistHtmlid(htmlid); return i1; }
一次可以删除多个缓存,根据缓存名。allEtries设置为true,将集合中的缓存一下删完。
2:自定义缓存,使用Spring Boot配置
添加依赖
'net.sf.ehcache:ehcache:2.8.3'
package com.li.configuration; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; @Configuration // 标注启动了缓存
@encaching
public class CacheConfiguration { /* * ehcache 主要的管理器 */ @Bean(name = "appEhCacheCacheManager") public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){ return new EhCacheCacheManager (bean.getObject ()); } /* * 据shared与否的设置,Spring分别通过CacheManager.create()或new CacheManager()方式来创建一个ehcache基地. */ @Bean public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){ EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean (); cacheManagerFactoryBean.setConfigLocation (new ClassPathResource("/encache.xml")); cacheManagerFactoryBean.setShared (true); return cacheManagerFactoryBean; } }
添加配置文件
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <diskStore path="java.io.tmpdir/Tmp_EhCache" /> <defaultCache eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" /> <cache name="queryByCategory" eternal="true" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="queryNews" eternal="true" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="queryGroup" eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="queryByHtmlid" eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="query" eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="backQuery" eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> <cache name="selectCount" eternal="true" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" /> </ehcache>