欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求

如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

為市中等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及市中網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、市中網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

緩存在開(kāi)發(fā)中經(jīng)常用到,我們常用 redis 這種第三方的緩存數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行緩存處理。

結(jié)果緩存

在 Hystrix 中也為我們提供了方法級(jí)別的緩存。通過(guò)重寫 getCacheKey 來(lái)判斷是否返回緩存的數(shù)據(jù),getCacheKey 可以根據(jù)參數(shù)來(lái)生成。這樣,同樣的參數(shù)就可以都用到緩存了。

改造之前的 MyHystrixCommand,在其中增加 getCacheKey 的重寫實(shí)現(xiàn),代碼如下所示。

@Overrideprotected String getCacheKey() {return String.valueOf(this.name);
}

在上面的代碼中,我們把創(chuàng)建對(duì)象時(shí)傳進(jìn)來(lái)的 name 參數(shù)作為緩存的 key。

為了證明能夠用到緩存,在 run 方法中加一行輸出,在調(diào)用多次的情況下,如果控制臺(tái)只輸出了一次,那么可以知道后面的都是走的緩存邏輯,代碼如下所示。

@Overrideprotected String run() {System.err.println("get data");return this.name + ":" + Thread.currentThread().getName();
}

執(zhí)行 main 方法,發(fā)現(xiàn)程序報(bào)錯(cuò)了,如圖 1 所示:

如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求

完整錯(cuò)誤信息如下:

Caused by: java.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the HystrixRequestContext?

根據(jù)錯(cuò)誤提示可以知道,緩存的處理取決于請(qǐng)求的上下文,我們必須初始化 Hystrix-RequestContext。

改造 main 方法中的調(diào)用代碼,初始化 HystrixRequestContext,代碼如下所示。

public static void main(String[] args) throws InterruptedException, ExecutionException {
    HystrixRequestContext context = HystrixRequestContext.initializeContext();
    String result = new MyHystrixCommand("zhangsan").execute();
    System.out.println(result);
    Future<String> future = new MyHystrixCommand("zhangsan").queue();
    System.out.println(future.get());
    context.shutdown();
}

改造完之后重寫執(zhí)行 main 方法,就可以做正常運(yùn)行了,輸出結(jié)果如圖 2 所示:

如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求

我們可以看到只輸出了一次 get data,緩存生效。

緩存清除

剛剛我們學(xué)習(xí)了如何使用 Hystrix 來(lái)實(shí)現(xiàn)數(shù)據(jù)緩存功能。有緩存必然就有清除緩存的動(dòng)作。

當(dāng)數(shù)據(jù)發(fā)生變動(dòng)時(shí),必須將緩存中的數(shù)據(jù)也更新掉,不然就會(huì)出現(xiàn)臟數(shù)據(jù)的問(wèn)題。同樣地,Hystrix 也有清除緩存的功能。

增加一個(gè)支持緩存清除的類,代碼如下所示。

public class ClearCacheHystrixCommand extends HystrixCommand<String> {private final String name;private static final HystrixCommandKey GETTER_KEY = HystrixCommandKey.Factory.asKey("MyKey");public ClearCacheHystrixCommand(String name) {super(HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("MyGroup"))
                .andCommandKey(GETTER_KEY));this.name = name;
    }public static void flushCache(String name) {
        HystrixRequestCache.getInstance(GETTER_KEY,HystrixConcurrencyStrategyDefault.getInstance()).clear(name);
    }@Overrideprotected String getCacheKey() {return String.valueOf(this.name);
    }@Overrideprotected String run() {
        System.err.println("get data");return this.name + ":" + Thread.currentThread().getName();
    }@Overrideprotected String getFallback() {return "失敗了 ";
    }
}

flushCache 方法就是清除緩存的方法,通過(guò) HystrixRequestCache 來(lái)執(zhí)行清除操作,根據(jù) getCacheKey 返回的 key 來(lái)清除。

修改調(diào)用代碼來(lái)驗(yàn)證清除是否有效果,代碼如下所示。

public static void main(String[] args) throws InterruptedException, ExecutionException {
    HystrixRequestContext context = HystrixRequestContext.initializeContext();
    String result = new ClearCacheHystrixCommand("zhangsan").execute();
    System.out.println(result);
    ClearCacheHystrixCommand.flushCache("zhangsan");
    Future<String> future = new ClearCacheHystrixCommand("zhangsan").queue();
    System.out.println(future.get());
}

執(zhí)行兩次相同的 key,在第二次執(zhí)行之前調(diào)用緩存清除的方法,也就是說(shuō)第二次用不到緩存,輸出結(jié)果如圖 3 所示:
如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求

由此可以看出,輸出兩次 get data,這證明緩存確實(shí)被清除了??梢园?ClearCache-HystrixCommand.flushCache 這行代碼注釋掉再執(zhí)行一次,就會(huì)發(fā)現(xiàn)只輸出了一次 get data,緩存是有效的,輸入結(jié)果如圖 2 所示。

合并請(qǐng)求

Hystrix 支持將多個(gè)請(qǐng)求自動(dòng)合并為一個(gè)請(qǐng)求(代碼如下所示),利用這個(gè)功能可以節(jié)省網(wǎng)絡(luò)開(kāi)銷,比如每個(gè)請(qǐng)求都要通過(guò)網(wǎng)絡(luò)訪問(wèn)遠(yuǎn)程資源。如果把多個(gè)請(qǐng)求合并為一個(gè)一起執(zhí)行,將多次網(wǎng)絡(luò)交互變成一次,則會(huì)極大地節(jié)省開(kāi)銷。

public class MyHystrixCollapser extends HystrixCollapser<List<String>, String, String> {private final String name;public MyHystrixCollapser(String name) {this.name = name;
    }@Overridepublic String getRequestArgument() {return name;
    }@Overrideprotected HystrixCommand<List<String>> createCommand(final Collection<CollapsedRequest<String, String>> requests) {return new BatchCommand(requests);
    }@Overrideprotected void mapResponseToRequests(List<String> batchResponse,
            Collection<CollapsedRequest<String, String>> requests) {
        int count = 0;for (CollapsedRequest<String, String> request : requests) {
            request.setResponse(batchResponse.get(count++));
        }
    }private static final class BatchCommand extends HystrixCommand<List<String>> {private final Collection<CollapsedRequest<String, String>> requests;private BatchCommand(Collection<CollapsedRequest<String, String>> requests) {super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
                    .andCommandKey(HystrixCommandKey.Factory.asKey("GetValueForKey")));this.requests = requests;
        }@Overrideprotected List<String> run() {
            System.out.println(" 真正執(zhí)行請(qǐng)求......");
            ArrayList<String> response = new ArrayList<String>();for (CollapsedRequest<String, String> request : requests) {
                response.add(" 返回結(jié)果 : " + request.getArgument());
            }return response;
        }
    }
}

接下來(lái)編寫測(cè)試代碼,代碼如下所示。

public static void main(String[] args) throws InterruptedException, ExecutionException {
    HystrixRequestContext context = HystrixRequestContext.initializeContext();
    Future<String> f1 = new MyHystrixCollapser("zhangsan").queue();
    Future<String> f2 = new MyHystrixCollapser("zhangsan333").queue();
    System.out.println(f1.get() + "=" + f2.get());
    context.shutdown();
}

通過(guò) MyHystrixCollapser 創(chuàng)建兩個(gè)執(zhí)行任務(wù),按照正常的邏輯肯定是分別執(zhí)行這兩個(gè)任務(wù),通過(guò) HystrixCollapser 可以將多個(gè)任務(wù)合并到一起執(zhí)行。從輸出結(jié)果就可以看出,任務(wù)的執(zhí)行是在 run 方法中去做的,輸出結(jié)果如圖 4 所示: 

如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求

看完上述內(nèi)容,你們掌握如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站題目:如何進(jìn)行SpringCloud-Hystrix緩存與合并請(qǐng)求
本文地址:http://aaarwkj.com/article46/gpgeeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站排名、、App開(kāi)發(fā)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
丝袜美腿美女日韩在线| 五月天男人的天堂精品| 中文字幕亚洲精品视频| 大胸妇女引诱老师在线观看 | 日韩一区二区三区高清免费视频成人| 国产精品第一区第二区| 国产男女做爰在线视频| 亚洲午夜天堂在线a毛片| 一级黄片电影中文字幕| 国产一区日本二区欧美三区| 免费看av网站一区二区| 成人黄片免费在线播放| 欧美精品欧美激情免费区| 日本不卡不码高清免费| 精品人妻中文字幕一区有码| 人妻激情偷乱视91九色| 男人天堂av东京热伊人| 日韩在线视频 一区二区三区| 少妇的诱惑免费在线播放| 亚洲av毛片一区二区| 国产一区二区欧美久久| 溪乱毛片一区二区三区| 亚洲男人的av天堂生活| 亚洲精品入口一区二区| 国产丝袜美腿诱惑久久 | 亚洲国产中文一区二区久久| 91麻豆亚洲国产成人久久| 国产男女视频免费观看| 好看的中文字幕人妻少妇| 精品一级人片内射视频| 日韩精品福利片午夜免费| 午夜精品久久福利视频| 亚洲一区在线观看蜜臀| 91久久精品国产一区| 草莓午夜视频在线观看| 日韩人妻高清精品专区| 久久五月婷婷爱综合亚洲| 尤物资源视频在线观看| av人妻熟女少妇蒂亚| 韩国av高清在线观看| 亚洲中文字幕第11页|