springboot2.0使用redis缓存问题汇总

springboot2.0使用redis缓存踩坑

本人使用的是springboot 2.0版本,缓存也是第一次使用,可以算得上是个小白了

配置springboot使用redis缓存


由于第一次使用缓存功能,基本上是按照网上的一些大神们的博客或者教程来完成

  • 首先需要配置pom文件引入redis
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-cacheartifactId>
        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遇到的问题,希望对一些像我这样的小白能有些帮助。

你可能感兴趣的:(springboot)