1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          DCache 分布式存儲系統|List 緩存模塊的創建與使用

          來源:互聯網轉載 時間:2024-01-29 07:42:09

          在之前的DCache系列文章中,我們介紹了 DCache 及其 KV 和 K-K-Row 緩存模塊的使用,本文將繼續介紹如何使用 DCache 中的列表類型緩存模塊 —— List 緩存模塊。

          • List 模塊簡介
          • 創建 List 緩存模塊
          • 獲取 DCache 接口文件
          • 創建緩存服務代理
          • 調用 List 緩存模塊服務
            • List 模塊讀寫操作
            • 實例
          • 其它 List 緩存模塊服務接口
          • 總結

          DCache 是一個基于 TARS 框架開發的分布式 NoSQL 存儲系統,支持多種數據結構,包括了 key-value(鍵值對),k-k-row(多鍵值),list(列表),set(集合),zset(有序集合)等,滿足多種業務需求。

          list 即鏈表,常用于消息的排列,比如 QQ、微信的聊天消息排序。常用的有單向鏈表和雙向鏈表,由若干鏈表節點組成,如下圖。

          單向鏈表,每個節點存儲該節點的數據和下一個節點的地址;雙向鏈表的每個節點則額外包含上一個節點的地址。

          DCache 中的 List 模塊是基于雙向鏈表實現的,每一個內存數據單元 Block 包含兩個指針,分別指向前一個 Block 和后一個 Block。DCache 還提供了操作 list 中某一段的 API,你可以直接查詢、刪除、替換和裁剪 list 中某一段的元素。如下圖為雙向鏈表的結構及替換操作的原理。

          同樣地,與其它模塊相似,我們完成以下步驟即可在服務中使用 list 緩存服務

          1. 創建 List 緩存模塊
          2. 獲取 DCache 接口文件
          3. 創建緩存服務代理
          4. 調用 List 緩存模塊服務

          本文將繼續基于 TestDemo 介紹如何創建 List 緩存模塊,以及怎么在 TARS 服務中調用該服務來緩存數據。

          本文使用的示例可以在 GitHub 倉庫 DCacheDemo(文末附鏈接) 中查看。

          前面的文章我們已經介紹過緩存模塊的創建,各類型緩存模塊創建流程是相似的,這部分不再贅述過程類似,這里命名為 TestDemoList,cache 類型 選擇 List(MKVCache)

          我們提到過,DCache 是基于 TARS 開發的,因此使用上和 TARS 服務一樣,也是通過 .tars 接口文件來調用對應緩存服務的接口。不同的是,DCache 的接口文件是固定的,我們只需復制 DCache/src/TarsComm 下的 CacheShare.tars, ProxyShare.tars 和 DCache/src/Proxy 下的 Proxy.tars到自己項目目錄下即可。(文末附鏈接)

          例如本文 Demo 獲取 DCache 接口文件后的項目文件結構如下

          DCacheDemo├── CacheShare.tars├── ProxyShare.tars├── Proxy.tars├── config.conf├── main.cpp└── makefile

          前面的文章中我們提到過,創建一個應用后會自動創建一個路由服務和代理服務,并通過 TestDemo 介紹了如何創建緩存服務代理來調用服務。

          我們繼續使用 TestDemo,新增一個模塊名 ModuleTestDemoList,值為我們前面創建的模塊名 TestDemoList,用于之后通過代理調用該模塊,如下

          通過 TestDemo 代理服務的代理對象和模塊名 TestDemoList,我們就能夠調用前面創建的 List 緩存模塊的接口了。本部分將通過簡單示例,介紹 list 類型緩存模塊部分接口的使用。關于其它接口的信息,參見 Proxy 接口指南(文末附鏈接)。

          接口調用流程與 TARS 服務接口調用流程一致。如果你還不清楚 TARS 服務的調用方式和流程,可以閱讀文章 TARS RPC 通信框架|提供多種遠程調用方式了解 TARS 服務的調用方式。

          后面的示例中,會使用到三個工具函數,定義如下

          那么接下來,我們來看看怎么使用 DCache 的 List 緩存模塊。

          List模塊讀寫操作

          List 模塊即列表緩存模塊。這里介紹寫接口 pushList 和讀接口 getList,其它接口用法類似。

          向列表插入數據

          接口 pushList 用于向列表頭部或者末尾插入數據,定義如下

          int pushList(const PushListReq &req)

          其中結構 PushList 定義如下

          struct PushListReq{    1 require string moduleName; // 模塊名    2 require string mainKey;    // 主key    3 require vector<InsertKeyValue> data;  // 待插入數據    4 require bool atHead = true;   // true 表示插入到 list 頭部,false 表示插入尾部};

          使用示例如下

          void testPushList(const string &mainKey, const vector<map<string, string>> &data, DCache::ProxyPrx prx){    // 構造請求    DCache::PushListReq req;    req.moduleName = ModuleTestDemoList;    req.mainKey = mainKey;    req.atHead = false;        for(auto item : data){        DCache::InsertKeyValue insertValue;        insertValue.mainKey = mainKey;        insertValue.expireTimeSecond = 60* 60* 24;                map<string, string>::const_iterator it = item.begin();        while(it != item.end())        {            // 構建 UpdateValue            insertValue.mpValue[it->first] = genUpdateValue(DCache::SET, it->second);            ++it;        }        req.data.push_back(insertValue);    }    prx->pushList(req);}

          獲取列表數據

          接口 getList 用于根據指定的主 key 和索引查詢列表的數據,定義如下

          int getList(constGetListReq&req, GetListRsp&rsp)

          其中請求消息結構 GetListReq 和返回消息結構 GetListRsp 及其嵌套結構 Entry 的定義如下

          struct GetListReq{    1 require string moduleName;  // 模塊名    2 require string mainKey;  // 主key    3 require string field;    // 需要查詢的字段集,多個字段用','分隔如 "a,b", "*"表示所有    4 require long index;      //索引    5 require string idcSpecified = "";  //idc區域};struct GetListRsp{    1 require Entry entry;  // 查詢結果};    struct Entry{    1 require map<string, string> data;};

          使用示例如下

          void testGetList(const string &mainKey, constlong &index, DCache::ProxyPrx prx){// 構造請求    DCache::GetListReq req;    req.moduleName = ModuleTestDemoList;    req.mainKey = mainKey;    req.field = "*";    req.index = index;        DCache::GetListRsp rsp;    prx->getList(req, rsp);        // 打印返回值    printMapData(rsp.entry.data);}

          實例

          我們來實際運行一下上面的使用示例。完整的使用示例可以在 GitHub 倉庫 DCacheDemo (文末附鏈接)中獲取。

          我們通過 testList 測試上節提到的兩個 List 讀寫接口,我們向主鍵為 test 的列表中插入一個值 test,如下

          void testList(DCache::ProxyPrx prx){    cout << START << " testList"<< endl;        string mainKey = "test";    vector<map<string, string>> data;    map<string, string> item;    item["VALUE"] = "test";    data.push_back(item);        testPushList(mainKey, data, prx);    long index = 0;    testGetList(mainKey, index, prx);    cout << END<< " testList"<< endl;}

          接著,在 main 函數中執行

          int main(int argc, char*argv[]){        ...            auto prx = comm->stringToProxy<DCache::ProxyPrx>(DCacheTestDemoObj);            // 調用 DCache 緩存服務            testList(prx);        ...}

          除了獲取列表數據接口 getList 和讀取鍵值接口 pushList,DCache 中還提供了豐富的 List 操作接口,包括批量插入(insertMKVBatch), 刪除(delMKV), 更新(updateMKV) 等,如下

          // 獲取列表上指定的某一數據int getList(GetListReq req, out GetListRsp rsp);// 獲取列表上指定范圍的數據int getRangeList(GetRangeListReq req, out BatchEntry rsp);// 向列表頭部或尾部插入數據int pushList(PushListReq req);// 彈出列表頭部或尾部的數據int popList(PopListReq req, out PopListRsp rsp);// 替換列表中的數據int replaceList(ReplaceListReq req);// 裁剪列表,只保留指定區間,刪除區間外的數據int trimList(TrimListReq req);// 從列表頭部或者尾部刪除一條或多條數據int remList(RemListReq req);

          接口的使用方式與前面介紹的 getListpushList 是類似的,關于接口的具體入參和出參結構可以參考 Proxy 接口指南。

          本文簡要介紹了 DCache 中的 list 緩存模塊的原理和使用流程,同時通過具體實例對部分接口的使用進行了詳細介紹,幫助讀者理解并能夠快速上手使用 list 緩存模塊。

          文中鏈接:

          DCacheDemo:

          https://github.com/ETZhangSX/DCacheDemo

          CacheShare.tars:

          https://github.com/Tencent/DCache/blob/master/src/TarsComm/CacheShare.tars

          ProxyShare.tars:

          https://github.com/Tencent/DCache/blob/master/src/TarsComm/ProxyShare.tars

          Proxy.tars:

          https://github.com/Tencent/DCache/blob/master/src/Proxy/Proxy.tars

          Proxy 接口指南:

          https://github.com/Tencent/DCache/blob/master/docs/proxy_api_guide.md

          標簽:dcache-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          英文publisher什么意思?這不是一回事?!鞍l布者”是指發布者。Bookseller是指圖書銷售商publisher是一種高級的辦公軟件,可以進行文字處理并輸出PDFMicrosoft office publisher是publisher的全稱,是Microsoft發布的桌面出版應用程序。它通常被認為是一個入門級的桌面發布應用程序。它可以提供比Word更強大的頁面元素控制功能,但不如專業的頁面...

          2月27日螞蟻莊園小課堂正確答案?2021螞蟻莊園小教學2月27日答案:問題:防藍光眼鏡一般需要定期更換屏幕,那遮陽傘呢?正確答案:也需要定期更換小鎮小課程玩法介紹:1、打開相機中的手機銀行,進入到pos機首頁后找到【更多】選項并點擊。2、點擊后會打開銀行卡的全部應用界面,在【教育公益】類別的下方找到并點擊【螞蟻莊園】。3、接下來會打開螞蟻莊園,在里面找到左下方位置的【領食品】功能并點擊。4、點擊...

          ig和dwg和fpx都是lpl戰隊嘛?ig和dwg和fpx三支戰隊不都是lpl戰隊。其中的ig戰隊和fpx戰隊是中國的lpl聯賽的戰隊,而dwg戰隊是韓國lck聯賽的戰隊。ig戰隊和fpx戰隊分別是由中國的富豪王思聰出資建立和滔博體育出資建立的中國賽區戰隊,而dwg戰隊是韓國的啟亞集團出資贊助的戰隊,他們并不是一個賽區的戰隊。fpx改名了嗎?fpx戰隊沒有改名,fpx戰隊在2017年收購了nb戰隊...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>