### springboot中的缓存
#### 如何启用缓存:
1. springboot中如果想要启用缓存,可以通过新增一个缓存配置文件,通过@EnableCacheing注解实现。
2. 配置文件中声明所需要使用的缓存管理器,可供选择的有:
1. ConcurrentMapCacheManager;
2. SimpleCacheManager;
3. NoOpCacheManager;
4. CompositeCacheManager;
5. EnCacheCacheManager;
3. spring3.2中出现的:
1. RedisCacheManager(来源于Spring Data Redis项目)
2. GemfireCacheManager(来源于Spring Data GemFire项目)
#### 如何使用缓存:
##### 通过注解的方式使用缓存:
1. @Cacheable: 在调用该方法前,会先寻找是否有该方法的返回值(与参数相关),没有则调用方法,并存入缓存,有则直接返回。
2. @CachePut:调用方法并将返回值放到缓存中去;
3. @CacheEvict:在缓存中清除一个或者多个条目;
4. @Caching:分组注解,能够同时应用多个其他的缓存注解
###### 各个注解的属性
@Cacheable 和 @CachePut的属性:
1. value: 缓存的名称;
2. condition: SpEL表达式,false则不会应用缓存;
3. key: 计算自定义的缓存key;
4. unless: SpEL表达式,如果为true则返回值不会放到缓存中去;
备注: 使用的示例:
@cachePut(value="abcname", key="#result.id"): 表示根据结果的id的属性作为key;
@CacheEvict的属性:
1. value: 名字;
2. key: 缓存的key值;
3. allEntries: 为true时,特定缓存的所有条目都会被清除;
4. beforeInvocation: true时,在方法调用之前移除条目,为false时,在方法成功调用之后再移除。
备注:
因为当beforeInvocation 为true的时候,是在方法调用之前的,所以key不能使用result的id等值,因为当时程序还没有执行。
##### 使用xml配置的方式使用缓存:
一些相关的标签的说明:
1.
2.
3.
4.
5.
6.
备注: 使用xml的时候,依旧需要注册下缓存的管理器相应的类,将其注册为bean;
注册示例:
```
```
附上部分代码:
##### CacheConfig.java:
```
package com.lee.world.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager();
}
}
```
##### CacheService.java
```
package com.lee.world.service;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
/**
* 测试Java 的cache
*/
@Service
public class CacheService {
@Cacheable("trycachecount")
public Integer getCount(Integer num)
{
System.out.println("come in");
return num++;
}
}
```