SpringCloud(10):Hystrix请求缓存

news2024/11/15 4:35:38

1 类继承的方法来实现请求缓存

1.1 编写CacheCommand类

package com.study.service.hystrix;

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.HystrixRequestCache;
import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategyDefault;
import org.springframework.web.client.RestTemplate;

public class CacheCommand extends HystrixCommand<String> {

    private Long cacheKey;
    private RestTemplate restTemplate;
    private Integer uid;

    public CacheCommand(Long cacheKey, RestTemplate restTemplate, Integer uid) {
        super(Setter.withGroupKey(
                HystrixCommandGroupKey.Factory.asKey("cache-group")).andCommandKey(HystrixCommandKey.Factory.asKey("cache-test")));
        this.restTemplate = restTemplate;
        this.uid = uid;
        this.cacheKey = cacheKey;
    }

    @Override
    protected String run() throws Exception {
        System.out.println("没有缓存,查询数据~!");
        String url = "http://study-user/user/{id}";
        String info = restTemplate.getForObject(url, String.class, uid);
        return info;
    }

    @Override
    protected String getCacheKey() {
        return String.valueOf(cacheKey);
    }

    //清空缓存
    public void clearRequestCache(){
        HystrixRequestCache.getInstance(
                HystrixCommandKey.Factory.asKey("cache-test"), HystrixConcurrencyStrategyDefault.getInstance())
                .clear(String.valueOf(cacheKey));
    }
}

1.2 在OrderService中添加getUser2方法

    // 继承类的方式
    public String getUser2(Integer id) {

        Long cacheKey = 9999L;
        CacheCommand cacheCommand = new CacheCommand(9999L, restTemplate, id);
        String val = cacheCommand.execute();


        return val;
    }

1.3 在OrderContoller中编写测试接口

    @RequestMapping("/cache")
    public String cache() {
        HystrixRequestContext context = HystrixRequestContext.initializeContext();

        // 调用用户,查询用户信息,
        String result1 = orderService.getUser2(1);
        String result2 = orderService.getUser2(2);

        context.close();

        return "result1:" + result1 + ",result2:" + result2;
    }

访问接口测试,可以发现,在cachekey相同的情况下,返回的值是相同的

如果需要不同时,直接修改cachekey可以获取,如:

修改getUser2为

    // 继承类的方式
    public String getUser2(Integer id) {

        Long cacheKey = 9999L+id;
        CacheCommand cacheCommand = new CacheCommand(9999L, restTemplate, id);
        String val = cacheCommand.execute();


        return val;
    }

也可以直接调用清理缓存的方法,如下:

    public String getUser2(Integer id) {

        Long cacheKey = 9999L;
        CacheCommand cacheCommand = new CacheCommand(9999L, restTemplate, id);
        String val = cacheCommand.execute();

        // 清空request缓存
        cacheCommand.clearRequestCache();

        return val;
    }

2 注解方式实现请求缓存

2.1 在OrderService中添加getUser3方法以及clearRequestCache方法

    //请求缓存注解
    @CacheResult
    @HystrixCommand(commandKey = "cache-user")
    public String getUser3(Integer id, @CacheKey Long cacheKey) {
        String url = "http://study-user/user/{id}";
        String info = restTemplate.getForObject(url, String.class, id);
        return info;
    }

    //缓存清除注解
    @CacheRemove(commandKey = "cache-user")
    @HystrixCommand
    public void clearRequestCache(@CacheKey Long cacheKey) {
    }

2.2 在OrderContoller中编写测试接口

    @RequestMapping("/cache2")
    public String cache2() {
        HystrixRequestContext context = HystrixRequestContext.initializeContext();

        // 调用用户,查询用户信息,
        String result1 = orderService.getUser3(1, 12345L);
        String result2 = orderService.getUser3(2, 12345L);

        context.close();

        return "cache2 result1:" + result1 + ", cache2 result2:" + result2;
    }

如果要清除缓存,直接调用clearRequestCache方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试 | Python 自动化测试技术面试真题

本文为面试某公司测试开发&#xff0f;自动化测试工程师时的面试题笔记。 全部笔试内容没有全部写全&#xff0c;只贴通用性的技术相关的笔试面试题&#xff0c;至于测试理论和团队管理的问题&#xff0c;都是大同小异&#xff0c;也没什么实际的参考价值。 1.直接手写一个 Pyt…

智慧工地 | 数字孪生楼宇施工管理平台

随着科学技术的进步&#xff0c;时代的发展&#xff0c;越来越多的智慧应用走进我们身边&#xff0c;万物互联不再是口号。当前智慧城市建设的兴起&#xff0c;都在要求建筑实现与物联网结合&#xff0c;使其扩展和延伸到建筑物和任何物品之间进行交换和通信&#xff0c;也就是…

python环境构造

目录 1. python安装包下载 2. 双击默认安装即可 3. python插件安装 4. 本地手动安装python插件 1. python安装包下载 可以去官网 (Download Python | Python.org) 下载&#xff0c;但是可能速度会比较慢 也可以去我的百度网盘下载&#xff0c;版本是win64 3.11.1版&#xf…

机器视觉 · 工业光源

文章目录光源 环形光源光源 环形漫反射光源光源 高亮环形无影光源光源 高亮环形大功率光源光源 双向高均匀漫射环形光源光源 多方向高均匀漫射环形光源光源 球状分布式对称无影光源光源 条形光源光源 条形光源光源 高亮条形光源光源 条形组合光源光源 背光源光源 …

安卓包在真机上安装时的“风险提示”问题

1&#xff09;安卓包在真机上安装时的“风险提示”问题 ​2&#xff09;iOS下AssetBundle的加载疑问 3&#xff09;特效用粒子系统&#xff0c;模拟器里出现花屏问题 4&#xff09;IL2CPP编译的Protobuf&#xff0c;反射类运行时报空 这是第321篇UWA技术知识分享的推送&#xf…

抖音商品机会潜力分析报告竞赛-3等奖作品分析

文章目录数据集介绍需要1以及结论需求2以及结论推荐开发商品A&#xff1a;鹊牌 三合一爆米花球形焦糖味奶香味100g玉米50g糖 50克油 包邮推荐开发商品B&#xff1a;【云南松茸菌汤包】熬汤必备 正宗云南产地货 60g/袋 包邮推荐开发商品C&#xff1a;推荐_【三只松鼠_巨型零食大…

力扣 1807. 替换字符串中的括号内容

题目 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道许多键对应的值&#xff0c;这些…

年度盘点(四)丨2022计讯物联企业文化活动精彩盘点

2022年&#xff0c;计讯物联聚焦企业文化软实力&#xff0c;以文化力引领企业发展力和核心竞争力&#xff0c;以塑造一流队伍为核心&#xff0c;不断找准发力点&#xff0c;深度策划系列企业文化活动&#xff0c;不断促进企业文化与公司业务的融合&#xff0c;持续增强全体计讯…

「自控原理」3.3 稳定性与稳态误差、时域校正

本节介绍稳定性分析的原理以及代数稳定性判据&#xff08;劳斯判据&#xff09; 本节介绍系统稳态误差的定义及计算方法 本节介绍时域校正方法 文章目录稳定性分析稳定的充要条件与必要条件劳斯判据-Routh例题两种特殊情况问题辨析稳态误差误差与稳态误差的定义计算稳态误差的一…

【手写 Vue2.x 源码】第三十篇 - diff算法-比对优化(上)

一&#xff0c;前言 上篇&#xff0c;介绍了diff算法-节点比对&#xff0c;主要涉及以下几点&#xff1a; 介绍了 diff 算法、对比方式、节点复用实现了外层节点的 diff 算法不同节点如何做替换更新相同节点如何做复用更新&#xff1a;文本、元素、样式处理 本篇&#xff0c…

在线教育-谷粒学院学习笔记(五)

文章目录1 内容介绍2 课程分类前端实现3 课程列表功能实现4 课程管理概括5 添加课程信息后端实现6 添加课程信息前端实现7 前端完善1 内容介绍 添加课程分类前端实现课程分类列表显示功能&#xff08;树形结构&#xff09;课程管理模块需求添加课程基本信息功能 2 课程分类前…

如何设置OpenFeign请求超时

Feign和OpenFeign介绍 Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用&#xff0c;只不过对原有的方式&#xff08;RibbonRestTemplate&#xff09;进行了封装&#xff0c;开发者不必手动使用RestTemplate调服务&#xff0c;而是定义一个接口&#xff0c;在这个…

byzer笔记本使用

byzer笔记本使用 数据源的定义 对于etl&#xff0c;起始的第一步往往是定义一个数据来源。 设置数据源 通过设置 -> 外部数据源 -> 新增可以新增jdbc类型的数据源。 命令指定数据源 notebook中可以使用connect命令进行jdbc数据源的指定: > SET user"root&q…

Elasticsearch(四)--一文弄懂ES的映射操作

一、前言 上一章学习了ES的索引相关操作&#xff0c;那么这一章就轮到映射&#xff0c;了解映射操作最重要的点就是去学习ES的数据类型。那么本章我们会了解到映射的创建、查看和修改操作&#xff0c;然后详细介绍ES中的基本数据类型和复杂的数据类型&#xff0c;并且会对常用…

解决ElementUI导航栏重复点菜单报错问题

在使用ElementUI中的导航时&#xff0c;默认情况下如果重复点击某选项&#xff0c;会报错。 element-ui.common.js?b705:3354 Error: Avoided redundant navigation to current location: “/home/home1”. at createRouterError (vue-router.esm.js?8c4f:2060) at createNa…

Java IO流 - 打印流详细使用介绍

文章目录打印流打印流基本使用输出语句重定向打印流 打印流基本使用 打印流: 作用&#xff1a;打印流可以实现更方便、更高效的打印数据到文件中去。打印流一般是指&#xff1a;PrintStream&#xff0c;PrintWriter两个类。 可以实现打印什么数据就是什么数据&#xff0c;例如…

【GD32F427开发板试用】06-硬件I2C软件I2C驱动0.91OLED

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;Stark_GS I2C 简介及特点 并行总线至 I2C 总线协议的转换及接口&#xff1b;同一接口既可实现主机功能又可实现从机功能&#xff1b;主从机之…

在线教育-谷粒学院学习笔记(四)

文章目录1 内容介绍2 阿里云存储OSS3 Java代码操作阿里云oss4 搭建阿里云oss项目环境5 上传头像后端实现6 Nginx使用7 上传头像前端实现8 课程分类管理介绍9 EasyExcel工具10 课程分类添加功能1 内容介绍 添加讲师实现头像上传功能 阿里云oss存储服务 添加课程分类功能 使用Ea…

欧拉的“她力量”,如何为品牌注入新能量?

文|智能相对论作者| Kinki近日&#xff0c;百度营销联合CBNData推出的《2022新能源汽车趋势洞察》正式发布&#xff0c;报告显示&#xff0c;随着新能源汽车的普及&#xff0c;新中产女性已成为了“消费新势力”。女性更偏爱新能源汽车已不是新鲜观点&#xff0c;调研显示&…

物理主机telenet登录ensp虚拟网络设备并显示配置python脚本

一、物理主机telnet登录ensp虚拟网络设备 1、物理主机配置 1.1、物理主机环回口虚拟网卡配置 见本人博客:Ensp用windows回环口连接cloud配置_ensp环回口配置_林锋Space的博客-CSDN博客https://liulinfeng.blog.csdn.net/article/details/128098737 1.2、物理主机telnet开启 …