欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于surging跨網(wǎng)關跨語言進行緩存降級的問題小結

 更新時間:2024年05月06日 09:02:27   作者:fanly11  
surging是一款開源的微服務引擎,包含了rpc服務治理,中間件,以及多種外部協(xié)議來解決各個行業(yè)的業(yè)務問題,這篇文章主要介紹了如何基于surging跨網(wǎng)關跨語言進行緩存降級,需要的朋友可以參考下

概述

surging是一款開源的微服務引擎,包含了rpc服務治理,中間件,以及多種外部協(xié)議來解決各個行業(yè)的業(yè)務問題,在日益發(fā)展的今天,業(yè)務的需求也更加復雜,單一語言也未必能抗下所有,所以在多語言行業(yè)解決方案優(yōu)勢情況下,那么就需要多語言的協(xié)同研發(fā),而對于協(xié)同研發(fā)環(huán)境下,統(tǒng)一配置的網(wǎng)關,多語言訪問調用必然會涉及到需要數(shù)據(jù)緩存的問題,那么怎么做到跨網(wǎng)關跨語言緩存降級呢?那么將在此篇文章中進行講解。

如何創(chuàng)建攔截器

繼承IInterceptor ,創(chuàng)建攔截,如下代碼所示

public class LogProviderInterceptor : IInterceptor
    {
        public async Task Intercept(IInvocation invocation)
        { 
            await invocation.Proceed();
            var result = invocation.ReturnValue;
        }
    }

服務引擎針對于IInterceptor 擴展了CacheInterceptor用來做緩存攔截,如以下代碼所示

public class CacheProviderInterceptor : CacheInterceptor
    {
        public override async Task Intercept(ICacheInvocation invocation)
        { 
        }
}

如何使用緩存攔截器

通過設置特性Metadatas.ServiceCacheIntercept配置緩存攔截,如以下代碼所示

[Metadatas.ServiceCacheIntercept(Metadatas.CachingMethod.Get, Key = "GetUser_{0}_{1}", L2Key = "GetUser_{0}_{1}",EnableL2Cache =true, CacheSectionType = "ddlCache", Mode = Metadatas.CacheTargetType.Redis, Time = 480)]

在處理業(yè)務的修改,刪除方法時候,需要移除依賴的緩存,那么可以設置CorrespondingKeys,如以下代碼所示

[Metadatas.ServiceCacheIntercept(CachingMethod.Remove, "GetUser_id_{0}", "GetUserName_name_{0}", CacheSectionType = SectionType.ddlCache, Mode = CacheTargetType.Redis)]

如何設置緩存Key

1.比如緩存設置為GetUserById_{0}, 傳遞的參數(shù)是int 類型,值為2199 ,那么產(chǎn)生的key就是GetUserById_2199.

2.比如緩存設置為GetUser_{0}_{1},傳遞的參數(shù)是UserModel類型,傳遞為new UserModel{ UserId=2199,Name="Fanly" }值,那么產(chǎn)生的Key就是GetUser_fanly_2199. 標識CacheKeyAttribute特性以生成緩存key, 并且設置SortIndex排序依次生成。

public class UserModel
    {
       [CacheKey(1)]
        public int UserId { get; set; }
        [CacheKey(2)]
        public string Name { get; set; }
        public int Age { get; set; }
    }

創(chuàng)建攔截模塊

通過以下代碼,把攔截器注入到服務引擎中

public class IntercepteModule : SystemModule
   {
       public override void Initialize(CPlatformContainer serviceProvider)
       {
           base.Initialize(serviceProvider);
       }
       /// <summary>
       /// Inject dependent third-party components
       /// </summary>
       /// <param name="builder"></param>
       protected override void RegisterBuilder(ContainerBuilderWrapper builder)
       {
           base.RegisterBuilder(builder);
           builder.AddClientIntercepted(typeof(CacheProviderInterceptor),typeof(LogProviderInterceptor));
       }
   }

如何跨語言調用中開啟緩存攔截降級

在surging 是調用分為二種

1.基于接口創(chuàng)建代理調用,可以作為同一語言的互相調用,性能上比第二種基于routepath要快,但是具有高耦合性

var userProxy = ServiceLocator.GetService<IServiceProxyFactory>().CreateProxy<IUserService>("User");

2.基于routepath調用,可以作為跨語言調用,性能上比第一種基于接口創(chuàng)建代理要慢,但是具有低耦合性

Dictionary<string, object> model = new Dictionary<string, object>();
  model.Add("name", name);
  string path = "api/hello/say";
   string result =await _serviceProxyProvider.Invoke<object>(model, path, null);

而在服務調用下,因為業(yè)務模型參數(shù)在基于routepath調用情況,做不到模型參數(shù)解析,只能支持單一參數(shù)和無參數(shù)的緩存攔截調用,而基于接口創(chuàng)建代理調用是可以支持業(yè)務模型緩存調用的,在以下特征情況下就需要在Metadatas.ServiceCacheIntercept特性下開啟EnableStageCache,代碼如下

[Metadatas.ServiceCacheIntercept(Metadatas.CachingMethod.Get, Key = "GetDictionary", L2Key = "GetDictionary", EnableL2Cache = true, CacheSectionType = "ddlCache", Mode = Metadatas.CacheTargetType.Redis, Time = 480, EnableStageCache = true)]

通過以上的代碼,運行后,在注冊中心注冊的服務路由下可以看到攔截器元數(shù)據(jù),這樣在其它語言通過元數(shù)據(jù)可以構造服務消費者的緩存攔截降級。

以下是基于二種調用的緩存結果存儲redis中

如何處理緩存K/V 中Value 過大

緩存中間件Redis是一種高性能的內存數(shù)據(jù)庫,用于存儲鍵值對的數(shù)據(jù)結構。當value的大小超過一定限制時,一般超過10K就會影響查詢的性能。這時候使用一二級緩存來解決,一級緩存用redis 存儲標記,標記緩存是否失效,二級緩存用本地緩存存儲,當標記失效不存在后,會遠程調用服務,返回結果添加一級緩存標記,返回結果添加到二級緩存。

提示:大家可以按照自己的業(yè)務需求,研發(fā)緩存攔截,不一定非要使用CacheProviderInterceptor,按照CacheProviderInterceptor一二級緩存進行構建研發(fā)

總結

社區(qū)版:https://github.com/fanliang11/surging,如果需要其它版本,請聯(lián)系作者。

到此這篇關于如何基于surging跨網(wǎng)關跨語言進行緩存降級的文章就介紹到這了,更多相關如何基于surging跨網(wǎng)關跨語言進行緩存降級內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文徹底弄懂spring?boot自動配置的過程(推薦)

    一文徹底弄懂spring?boot自動配置的過程(推薦)

    SpringBoot的自動配置機制通過@SpringBootApplication注解作為起點,結合@EnableAutoConfiguration和spring.factories文件,實現(xiàn)了基于類路徑依賴、環(huán)境配置和自定義代碼的智能化配置,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Java設計模式中的建造者模式詳解

    Java設計模式中的建造者模式詳解

    這篇文章主要介紹了Java設計模式中的建造者模式詳解,建造者模式使我們日常工作中比較常見的一種設計模式,和工廠模式一樣屬于創(chuàng)建型設計模式,用于解耦對象創(chuàng)建和對象使用的邏輯,需要的朋友可以參考下
    2023-12-12
  • Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式

    Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式

    這篇文章主要介紹了Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Springboot配置文件內容加密代碼實例

    Springboot配置文件內容加密代碼實例

    這篇文章主要介紹了Springboot配置文件內容加密代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java中Volatile關鍵字詳解及代碼示例

    Java中Volatile關鍵字詳解及代碼示例

    這篇文章主要介紹了Java中Volatile關鍵字詳解及代碼示例,分為兩個部分,第一部分介紹了Volatile關鍵字的基本概念等內容,第二部分分享了實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring cloud 查詢返回廣告創(chuàng)意實例代碼

    Spring cloud 查詢返回廣告創(chuàng)意實例代碼

    在本篇文章里小編給大家整理的是關于Spring cloud 查詢返回廣告創(chuàng)意實例代碼,需要的朋友們可以跟著學習下。
    2019-08-08
  • Java中使用注解獲取和改變Bean的指定變量值

    Java中使用注解獲取和改變Bean的指定變量值

    Java有時需要通過自定義注解,獲取某Bean的某變量的值,根據(jù)業(yè)務要求處理數(shù)據(jù),然后再把新值設置回Bean的同一變量中,這篇文章介紹了使用注解獲取和改變Bean變量值的過程,感興趣想要詳細了解可以參考下文
    2023-05-05
  • 淺談 JDBC 元數(shù)據(jù)

    淺談 JDBC 元數(shù)據(jù)

    這篇文章主要介紹了JDBC元數(shù)據(jù)的相關內容,涉及一些獲取數(shù)據(jù)源各種信息的方法,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • java中timer的schedule和scheduleAtFixedRate方法區(qū)別詳解

    java中timer的schedule和scheduleAtFixedRate方法區(qū)別詳解

    這篇文章主要為大家詳細介紹了java中timer的schedule和scheduleAtFixedRate方法區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • springboot項目實現(xiàn)多數(shù)據(jù)源配置使用dynamic-datasource-spring-boot-starter的操作步驟

    springboot項目實現(xiàn)多數(shù)據(jù)源配置使用dynamic-datasource-spring-boot-starter

    這篇文章主要介紹了springboot項目實現(xiàn)多數(shù)據(jù)源配置使用dynamic-datasource-spring-boot-starter,本文分步驟結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論