redis缓存的应用—注解方式
加redis配置和依赖
redis:
host: 127.0.0.1
port: 6379
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
启动类加注解@EnableCaching (依雷波咔寻)
查看maven依赖关系
ctrl+F 查找依赖
项目中已经有了这个依赖所以我们不需要引入。如果项目中没有的需要引入下面的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
买家商品列表加上缓存注解 @Cacheable
@Cacheable(cacheNames = "product",key = "123")
启动项目访问
注意:报错原因是ResultVO没有序列化
解决方法
ResultVO继承Serializable接口
自动生成 serialVersionUID 的设置
使用idea自动生成serialVersionUID
完成后继续访问接口已经有数据了,并且也缓存进了redis,下一次查询就不再访问接口而是直接从redis中拿数据
数据
redis
如何保证缓存和数据库同步
更新商品或增加商品接口加注解
方法一: @CacheEvict 注解,表示更新或增加商品时删除缓存
@CacheEvict(cacheNames = "product", key = "123")
方式二:@CachePut注解,表示更新或增加商品时同步缓存(使用时需要注意返回的对象必须和查询时返回的对象一致)
重点:使用@CachePut注解时需要注意返回的对象必须和查询时返回的对象一致
@CachePut(cacheNames = "product",key = "123")
如下图返回的是同一个商品信息:
关于key,如果不填或者为空,那么默认key为方法的参数,
如果保存和查询key不同将影响缓存的同步
简写:把cachNames属性提到类名上面
@Cacheable注解的其他参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PhmjcXU3-1582985788279)(项目优化.assets/1578580903100.png)]
unless的意思是如果不,所以想表示Code=0进行缓存,需要 用 != 0
总结:
记住三个注解:@EnableCaching 、@Cacheable、@CacheEvict 、@CachePut
@EnableCaching (读音:依雷波咔寻)启动类加EnableCaching 注解 表示启用缓存
@Cacheable (读音:开k耳跛) 缓存注解
保证缓存和数据库同步的注解:
@CacheEvict(读音:咔西内特) :表示更新或增加商品时删除缓存
@CachePut(读音: 咔西瀑特):表示更新或增加商品时同步缓存(使用时需要注意返回的对象必须和查询时返回的对象一致)