SpringCloudAlibaba云商场-高性能门户网构建(五)

89 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 {

接口来请求两次,可以看到第二次请求加载速度很快

推广产品缓存加载.jpg

总结:本篇主要介绍了一下缓存常用注解还有对@Cachable注解的使用,下一篇将会介绍一下其他注解的使用。