前言

之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的、分布式的缓存解决方案,使用默认的这种缓存方式,只是在当前进程里缓存了而已。Spring Cache整合Redis来实现缓存,其实也不是一件复杂的事情,下面就开始吧。

关于Spring Cache的运用,请参考[快学SpringBoot]快速上手好用方便的Spring Cache缓存框架

新建一个SpringBoot项目

依赖

<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。

配置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<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
} }

如果要设置缓存管理器所管理的缓存名字,RedisCacheManager构造方法提供一个可变参数的构造器:

测试

新建一个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,代码如下:

@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等视频资料

最新文章

  1. ZZUOJ1196: 单调数
  2. Number()、parseInt() 和 parseFloat() 的区别
  3. [转]c++ vector 遍历方式
  4. codeforces 425D
  5. 取模(mod)
  6. Swift 本地推送通知UILocalNotification
  7. WebDriver 运行模式下使用rc 代码
  8. Hdu 5213-Lucky 莫队,容斥原理,分块
  9. jQuery 获取文件后缀的方法
  10. .NET简单的语句
  11. 安装WindowsXP操作系统(Ghost版) - 初学者系列 - 学习者系列文章
  12. CSS倒影
  13. 基于hdp2.5升级phoenix版本为4.8
  14. oracle 删除外键约束 禁用约束 启用约束
  15. 【转载自netfocus博客】聚合(根)、实体、值对象精炼思考总结
  16. N个数组中所有元素的排列组合(笛卡尔积)算法
  17. P3709 大爷的字符串题 (莫队)
  18. Ubuntukylin 14.04 系统语言改成中文[转]
  19. JAVA中for与while关于内存的细节问题
  20. 结合canvas和jquery.Jcrop.js裁切图像上传图片

热门文章

  1. axios中then不用第二个参数,最好用catch
  2. Scale9Sprite 的 setCapInsets中需要注意的地方
  3. &amp;nbsp;&amp;laquo;&amp;raquo;&amp;lt;&amp;gt;
  4. Go反射
  5. pwnable.kr-echo1-Writeup
  6. curl模板----php发送post,get请求
  7. 安装CDH第三方依赖包
  8. pwnable.kr-flag-Writeup
  9. 「JSOI2015」套娃
  10. .NET平台性能测试工具BenchmarkDotnet 简介[译文]