CRL快速開發框架系列教程六(分佈式緩存解決方案)

本系列目錄

  1. CRL快速開發框架系列教程一(Code First數據表不需再關心)
  2. CRL快速開發框架系列教程二(基於Lambda表達式查詢)
  3. CRL快速開發框架系列教程三(更新數據)
  4. CRL快速開發框架系列教程四(刪除數據)
  5. CRL快速開發框架系列教程五(使用緩存)
  6. CRL快速開發框架系列教程六(分佈式緩存解決方案)
  7. CRL快速開發框架系列教程七(使用事務)
  8. CRL快速開發框架系列教程八(使用CRL.Package)
  9. CRL快速開發框架系列教程九(導入/導出數據)
  10. CRL快速開發框架系列教程十(導出對象結構)
  11. CRL快速開發框架系列教程十一(大數據分庫分表解決方案)
  12. CRL快速開發框架系列教程十二(MongoDB支持)
  13. CRL快速開發框架系列教程十三(嵌套查詢)

 正文

在上一節講了如何使用內存緩存,通過Linq.Expressions,可以方便查找數據,不過這有個缺點,僅限當前應用程序

如果想在其它服務器上使用緩存,那就可以選用MemberCache,Redis之類的提供分佈式緩存服務了,不過和直接內存查找相比,沒法自定義查找

因爲他們數據結構是K/V形式,只能按Key查找數據,如果我想在分佈式服務器上實現自定義內存查找,那麼此方案來了(好像和OData一樣)

之前寫過一篇,再整理一次 緩存服務新思路,創建動態查詢的緩存

爲了傳輸查找命令,有了此結構

實現分佈式服務器配置

整體結構大致如此,CRL內部作了簡單實現

配置服務端

服務端需要配置能查詢哪些緩存類型,因此在應用程序啓動

服務端可以自定義通訊方式,需要自已實現,來個TCP的,比HTTP快很多

//增加處理規則,可以添加多個
CRL.CacheServerSetting.AddCacheServerDealDataRule(typeof(Code.ProductData), Code.ProductDataManage.Instance.DeaCacheCommand);
//啓動服務端
var cacheServer = new CRL.CacheServer.TcpServer(1136);
cacheServer.Start();

服務端可以添加多種對象類型,返回數據方法爲DeaCacheCommand,由CRL自動實現

服務端啓動一個TCP監聽,客戶端由此端口號通信

配置客戶端

客戶端需要添加服務端組,以獲取分佈在不同服務器上的數據

//有多個服務器添加多個
/要使用緩存服務,需要設置ProductDataManage.QueryCacheFromRemote 爲 true
CRL.CacheServerSetting.AddTcpServerListen("127.0.0.1", 1136);
CRL.CacheServerSetting.Init();

同時設置當前管理類QueryCacheFromRemote爲true

目的是告訴本地調用,從此查詢緩存由遠端處理

public class ProductDataManage : CRL.BaseProvider<ProductData>
...
protected override bool QueryCacheFromRemote
        {
            get
            {
                return true;
            }
        }

客戶端調用

和本地緩存調用一樣,直接寫就行了

var item = Code.ProductDataManage.Instance.QueryItemFromCache(b => b.Id > 0 && b.ProductName.Contains("product"));

因爲在服務端配置過能處理哪些數據,在客戶端啓動時會得到一份列表,然後各種類型的數據上各服務端查找

調試看數據:

服務端收到的命令

反解析爲表達式

客戶端收到的數據

反序列化爲對象

到此整個流程就走完了,分佈式緩存調用和本地調用沒什麼差別,簡單方便

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章