本文测试环境: Spring Boot 2.1.4.RELEASE + Redis 5.0.4 + CentOS 7
自带缓存
如果没有使用缓存中间件,Spring Boot 会使用默认的缓存,我们只需启用即可
在启动类添加 @EnableCaching 注解
1 | @SpringBootApplication |
缓存配置
- @Cacheable: 先判断有没有缓存,有缓存取缓存,否则执行后续操作后结果存入缓存
- @CachePut: 操作后结果存入缓存
- @CacheEvict: 清除缓存
具体使用见下面示例:
1 | @Service |
结合 Redis 使用
关于 Redis 基本使用,参考昨天的随笔 Spring Boot + Redis 初体验
添加配置
1 | spring: |
缓存类添加代码
1 | @Service |
注意事项
要缓存的类要实现 Serializable 接口
存在问题 (坑)
在配置文件配置 key-prefix 和 use-key-prefix 项生成的 key 会有问题:
| key-prefix | 不配置 | key- | key- |
| use-key-prefix | 不配置 | true | false |
| Redis缓存内的key | user::1 | key-1 | 1 |
如上所示,如果配置了 key-prefix 和 use-key-prefix 设置的 cacheNames 会被覆盖掉,两个或以上类的对象缓存会有问题
未解决问题
结合 Redis 使用时即使使用自定义 RedisTemplate 改变了 Serializer, 但在实际序列化时仍然使用的是默认的 JdkSerializationRedisSerializer,不知道为什么会这样 (这应该也是需要缓存的类为什么必须实现 Serializable 接口),还恳请大神指教!
源码:GitHub
本人 C# 转 Java 的 newbie, 如有错误或不足欢迎指正,谢谢
参考: