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