spring緩存cache的使用
在spring配置文件中添加schema和spring對緩存注解的支持:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd" default-autowire="byName"> <!--緩存配置--> <cache:annotation-driven/>
在spring配置文件中加入緩存管理器:
<!-- generic cache manager --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="hardwareCache"/> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="bannerCache"/> </set> </property> </bean>
然后在代碼的service的impl層加上如下注解即可把數(shù)據(jù)緩存起來:
@Cacheable(value="bannerCache")
其中@Cacheable表示spring將緩存該方法獲取到的數(shù)據(jù),(緩存是基于key-value方式實現(xiàn)的),key為該方法的參數(shù),value為返回的數(shù)據(jù),當你連續(xù)訪問該方法時你會發(fā)現(xiàn)只有第一次會訪問數(shù)據(jù)庫. 其他次數(shù)只是查詢緩存.減輕了數(shù)據(jù)庫的壓力.
當更新了數(shù)據(jù)庫的數(shù)據(jù),需要讓緩存失效時,使用下面的注解:
這個注解表示讓appCache緩存的所有數(shù)據(jù)都失效。
@CacheEvict(value = "appCache", allEntries = true)
springcache配置緩存存活時間
Spring Cache @Cacheable本身不支持key expiration的設置,以下代碼可自定義實現(xiàn)Spring Cache的expiration,針對Redis、SpringBoot2.0。
直接上代碼:
@Service @Configuration public class CustomCacheMng{ private Logger logger = LoggerFactory.getLogger(this.getClass()); // 指明自定義cacheManager的bean name @Cacheable(value = "test",key = "'obj1'",cacheManager = "customCacheManager") public User cache1(){ User user = new User().setId(1); logger.info("1"); return user; } @Cacheable(value = "test",key = "'obj2'") public User cache2(){ User user = new User().setId(1); logger.info("2"); return user; } // 自定義的cacheManager,實現(xiàn)存活2天 @Bean(name = "customCacheManager") public CacheManager cacheManager( RedisTemplate<?, ?> redisTemplate) { RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(redisTemplate.getConnectionFactory()); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(2)); return new RedisCacheManager(writer, config); } // 提供默認的cacheManager,應用于全局 @Bean @Primary public CacheManager defaultCacheManager( RedisTemplate<?, ?> redisTemplate) { RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(redisTemplate.getConnectionFactory()); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); return new RedisCacheManager(writer, config); } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/Petershusheng/article/details/52397895