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快速開發框架系列教程十三(嵌套查詢)

 正文html

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

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

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

以前寫過一篇,再整理一次 緩存服務新思路,建立動態查詢的緩存框架

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

實現分佈式服務器配置ide

總體結構大體如此,CRL內部做了簡單實現post

配置服務端

服務端須要配置能查詢哪些緩存類型,所以在應用程序啓動大數據

服務端能夠自定義通信方式,須要自已實現,來個TCP的,比HTTP快不少spa

//增長處理規則,能夠添加多個
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"));

由於在服務端配置過能處理哪些數據,在客戶端啓動時會獲得一份列表,而後各類類型的數據上各服務端查找

調試看數據:

服務端收到的命令

反解析爲表達式

客戶端收到的數據

反序列化爲對象

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

相關文章
相關標籤/搜索