以前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,咱们须要一个高可用的、分布式的缓存解决方案,使用默认的这种缓存方式,只是在当前进程里缓存了而已。Spring Cache整合Redis来实现缓存,其实也不是一件复杂的事情,下面就开始吧。html
关于Spring Cache的运用,请参考[快学SpringBoot]快速上手好用方便的Spring Cache缓存框架java
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
复制代码
主要是最下面两个依赖:spring-boot-starter-cache 和 spring-boot-starter-data-redis。nginx
在application.properties中添加redis的配置web
spring.redis.host=127.0.0.1
# spring.redis.password=
spring.redis.port=6379
复制代码
这是最基础的三个配置(其实默认值就是这样,就算不写也能够)。固然,还有空闲链接数,超时时间,最大链接数等参数,我这里都没有设置,在生产项目中,根据实际状况设置。redis
新建RedisCacheConfig.classspring
@Configuration
@EnableCaching
public class RedisCacheConfig {
/** * 缓存管理器 */
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//设置CacheManager的值序列化方式为json序列化
RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
}
复制代码
若是要设置缓存管理器所管理的缓存名字,RedisCacheManager构造方法提供一个可变参数的构造器:json
新建一个MockService.java,代码以下:缓存
@Service
public class MockService {
/** * value 缓存的名字,与cacheName是一个东西 * key 须要缓存的键,若是为空,则会根据参数自动拼接 * 写法:SpEL 表达式 */
@Cacheable(value = "listUsers", key = "#username")
public List<String> listUsers(String username) {
System.out.println("执行了listUsers方法");
return Arrays.asList("Happyjava", "Hello-SpringBoot", System.currentTimeMillis() + "");
}
}
复制代码
新建一个TestController.java,代码以下:app
@RestController
public class TestController {
private final MockService mockService;
public TestController(MockService mockService) {
this.mockService = mockService;
}
@GetMapping(value = "/listUsers")
public Object listUsers(String username) {
return mockService.listUsers(username);
}
}
复制代码
请求接口:框架
Redis中的数据:
本文发布于掘金号【Happyjava】。Happy的掘金地址:juejin.im/user/5cc289…,Happy的我的博客:blog.happyjava.cn。欢迎转载,但须保留此段声明。
搜索公众号【Happyjava】,回复【电子书】和【视频】,便可获取大量优质电子书和大数据、kafka、nginx、MySQL等视频资料