携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
每日英语:
Strive not to be a success,but rather to be of value.
翻译:不要努力去做一个成功的人,而应该努力去做一个有价值的人。 -阿尔伯特·爱因斯坦
1.缓存常用注解介绍
@EnableCaching:
开关注解,在项目启动类或某个配置类上使用此注解后,则表示允许使用注解的方式进行缓存操作。
@Cacheable:
可用于类或方法上。在目标方法执行前,会根据key先去缓存中查看是否有数据存在,有就直接返回缓存中key对应的value值,不再执行目标方法;反之则执行目标方法,并将方法的返回值作为value,并以键值对的形式存入缓存。可以理解为查询缓存。
@CacheEvict:
可用于类或方法上。执行完目标方法后,清楚缓存中对应key的数据(如果缓存中有对应key的数据存在的话),可以理解为删除缓存。
@CachePut:
可用于类或方法上。在执行完目标方法后,并方法返回的值作为value,并以键值对的形式存入缓存中。可以理解为缓存更新。
@Caching:
此注解即可作为@Cacheable、@CacheEvict、@CachePut三种注解中的任何一种或几种来使用。
@CacheConfig:
可以用于配置@Cacheable、@CacheEvict、@CachePut 这三个注解中的一些公共属性,例如cacheNames、keyGenerator。
2.推广产品缓存操作
1)配置缓存链接
修改bootstrap.yml,增加配置Redis缓存链接,如下:
#Redis配置
redis:
host: 127.0.0.1
port: 6379
2)开启缓存
在com.xz.mall.MallGoodsServiceApplication启动类上添加@EnableCaching 注解
@SpringBootApplication
@MapperScan(basePackages = {"com.xz.mall.goods.mapper"})
@EnableCaching
public class MallGoodsServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MallGoodsServiceApplication.class, args);
}
}
3)在根据推广分类查询推广产品列表的 com.xz.mall.goods.service.impl.SkuServiceImpl添加@Cachable注解,代码如下:
@Cacheable(cacheNames = "ad-items-skus", key = "#id")
@Override
public List<Sku> typeSkuItems(Integer id) {
4)在postman上请求测试一下接口,看看
发现报错
{
"timestamp": "2022-08-15T08:08:35.315+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.io.NotSerializableException: com.xz.mall.goods.model.Sku",
"path": "/sku/aditems/type/1"
}
可以看到是序列化的错误,应该是没有进行序列化,Sku实体类中
public class Sku implements Serializable {
接口来请求两次,可以看到第二次请求加载速度很快
总结:本篇主要介绍了一下缓存常用注解还有对@Cachable注解的使用,下一篇将会介绍一下其他注解的使用。