@Cacheable生效后但是在Redis的库里面没找到相应key的数据
1. 问题描述:
- 大佬让我去查我的服务中出现的几条异常SQL,查到一条一小时执行几十万次的SQL。我看了一下这个执行这个SQL所在的方法,发觉是可以通过加缓存去解决sql执行次数过多的异常的。于是我在这个方法(service的实现类的方法)上加上了@Cacheable注解。
- 加上了之后,发现一个很奇怪的现象:debug的时候,第二次确实不会进入加了缓存的方法内部了,但是方法里面的相关sql还是有执行,说明有查了数据库。查了Redis的缓存仓库,也没有看到我设置的key以及相应的值。
- debug进入org.springframework.cache.interceptor.CacheInterceptor的invoke方法,发现每次都没有命中缓存。
- 启动类上已经有加了@EnableCaching注解。
2. 问题分析
- 我登录了redis所在服务器,通过命令行在Redis存了一条数据,发现没问题。说明Redis本身是没问题的。
- 检查了Redis的配置没啥问题。
- 猜想是不是没连上Redis。然后发现pom没加上redis的依赖,加上之后发现问题解决了。
3. 问题解决
4. 注意事项
- @Cacheable注解要在启动类加上@EnableCaching才能生效
|