Hystrix熔断器整合 - 请求缓存

实战前需了解:https://blog.csdn.net/wanzijy/article/details/125041622
Hystrix熔断器整合 - 搭建项目:https://blog.csdn.net/wanzijy/article/details/125496651
Hystrix熔断器整合 - 请求缓存:https://blog.csdn.net/wanzijy/article/details/125512072
Hystrix熔断器整合 - 请求合并:https://blog.csdn.net/wanzijy/article/details/125579664
Hystrix熔断器整合 - 服务隔离之线程池隔离:https://blog.csdn.net/wanzijy/article/details/125630353
Hystrix熔断器整合 - 服务隔离之信号量隔离:https://blog.csdn.net/wanzijy/article/details/125826690
Hystrix熔断器整合 - 服务熔断和服务降级:https://blog.csdn.net/wanzijy/article/details/125826853
Hystrix熔断器整合 - Feign实现服务容错:https://blog.csdn.net/wanzijy/article/details/125985304
Hystrix熔断器整合 - 可视化界面三部曲:https://blog.csdn.net/wanzijy/article/details/126005452

1. 在 order-service-rest 导入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
</dependency>

2. 修改 order-service-rest 模块的 application

spring:
  application:
    name: order-service-rest
  # redis 缓存
  redis:
    timeout: 10000  #  连接超时时间
    host: localhost  #  服务器地址
    port: 6379  #  服务器端口
    database: 0  #  选择一个数据库,默认是 0 库
    lettuce:
      pool:
        max-active: 1024  #  最大连接数,默认8
        max-wait: 10000  #  最大连接阻塞等待时间,单位毫秒,默认 -1
        max-idle: 200  #  最大空闲连接,默认8
        min-idle: 5  #  最小空闲连接,默认0

3. 将 redis 对象注入并重写序列化方式

@Configuration
public class RedisConfig {

    /**
     * 重写 RedisTemplate 序列化
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        template.setKeySerializer(new StringRedisSerializer());  //  为 string 类型 key 设置序列化器
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());  //  为 string 类型 value 设置序列化器

        template.setHashKeySerializer(new StringRedisSerializer());  //  为 hash 类型 key 设置序列化器
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());  //  为 hash 类型 value 设置序列化器

        template.setConnectionFactory(redisConnectionFactory);

        return template;
    }

    /**
     * 重写 Cache 序列化
     * @param redisTemplate
     * @return
     */
    @Bean
    public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(30))   // 设置缓存过期时间为30分钟
                //  设置 key 和 value 的序列化
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
    }
}

4. 修改 order-service-rest 中ProductServiceImpl 的对应方法

在这里插入图片描述

@Cacheable(cacheNames = "orderService:product:list")  //  以目录的方式创建缓存数据

以目录的形式创建缓存数据的意思如下图:
在这里插入图片描述
在可视化界面中,其实就是按层级的形式去存储数据。当不同类型的数据较多时,可以将其存在不同的父目录下加以区分

5. 在 order-service-rest 的启动类上开启缓存注解

@EnableCaching  //  开启缓存注解

6. 测试

在 JMeter 中添加 “ http://localhost:9090/order/1/product/list ” 接口的高并发测试

JMeter 的使用教程可以看我的另一篇关于 JMeter 的文章

https://blog.csdn.net/wanzijy/article/details/125080317

开始进行高并发模拟后,测试 “ http://localhost:9090/order/1/product ” 接口是否受影响

解释:

  • 因为在 “ http://localhost:9090/order/1/product/list ” 接口中,做了数据的缓存和高并发的模拟
  • 如果在浏览器多次访问 “ http://localhost:9090/order/1/product ” 接口时,在浏览器的控制台观察到每一次访问的时间并没有太大的变化,则意味着在高并发的环境下也没有影响到该接口的访问
  • 再去 JMeter 观察 “ http://localhost:9090/order/1/product/list ” 接口的访问时间,如果发现也不会有太大的变化,而且时间也不会太长,则意味着在高并发的访问下,该接口的数据是从缓存 Redis 中直接获取的,也就意味着请求缓存成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LF3_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值