springboot2.0使用redis缓存踩坑
本人使用的是springboot 2.0版本,缓存也是第一次使用,可以算得上是个小白了
配置springboot使用redis缓存
由于第一次使用缓存功能,基本上是按照网上的一些大神们的博客或者教程来完成
- 首先需要配置pom文件引入redis
<!--redis和缓存依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
- 属性配置文件(这里需要注意如果你的pom中还引入了其他缓存比如ehcache,这里需要设置一个属性 spring.cache.type=redis,缓存是不会进入redis的 )
spring:
redis:
host: localhost
port: 6379
jedis:
pool:
max-active: 20
max-idle: 20
min-idle: 0
max-wait: 60s
使用缓存
这里我使用的就是网上的方式
- 在启动类上开启缓存
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 然后在你需要使用缓存的dao层也好service层也好 添加缓存注解
@Cacheable
@CachePut
@CacheEvict
网上大多数教程都是教到这里基本也就结束了,剩下基本就是我踩得坑了…
1. 首先是上面配置文件的那个,由于我原来的项目中是有ehcache的,但是当我想用redis作为缓存的时候如果不配置cache.type缓存是不会生效的!
2. 这个坑可能是由于我太小白了造成的,就是你要缓存的实体类一定要实现 Serializable
接口,否则在你获取的时候是无法序列化的,其实这个问题想一下好了毕竟你把一个类存到redis中要再取出来是需要序列化操作的…可能是我脑子愚钝,报错了之后才发现这个问题。
3. 如果你是在接口中使用cache相关的注解,key要是使用spel表达式的话要使用 #p0
这样的,不要直接#name
这种的表达式。否则会因为代理的问题导致报错传入的key为空,可以看一下这个StackOverflow上别人的提问 参考文章
以上就是本人初次尝试使用redis遇到的问题,希望对一些像我这样的小白能有些帮助。