<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # memcached [TOC] ## 一、memcached基礎 ### 1. 基礎概念 官網:http://memcached.org/ 開源的,支持高性能、高并發的分布式內存緩存系統,是一套僅利用系統內存進行數據緩存的軟件,一種非關系型數據庫。 原理是通過在實現規劃好的系統內存空間中臨時緩存數據庫中的各類數據,以達到減少前端業務服務對數據庫的直接高并發訪問,從而提升大規模網站集群中動態服務的并發訪問能力。 在企業中的用途: * 作為數據庫的查詢數據緩存。 * 作為集群節點的session會話共享。 ### 2. 常見緩存服務軟件對比 1. memcached 純內存型,常用于緩存網站后端各類數據 2. redis、memcachedb 內存型,但可持久化存儲,還能作為關系型數據庫的重要補充 3. squid、nginx 內存、內存加磁盤,主要用戶緩存web前端的服務內容,CDN公司的選擇 ### 3. 工作流程 當程序需要訪問后端數據庫提取數據時,會先訪問memcached緩存,如果緩存中數據就直接返回給用戶,如果沒有數據再去訪問數據庫,并且可以在訪問數據庫得到數據后,將數據存儲到緩存中,則下次這些數據再被訪問時,就不需要調用數據庫了。 如果數據中的數據更新或刪除,也要通告memcached,需要保證緩存和數據庫中的數據一致、數據庫訪問緩存數據怎么寫入緩存,需要由開發人員開發的程序控制。 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200308/193617655.png) ### 4. memcached特點 * 協議簡單,基于文本行的協議,通過telnet、nc等命令都能操作里面的數據 * 支持epoll/kqueue異步I/O模型,使用libevent作為事件處理通知機制。 * 采用key/vaule鍵值對數據類型 * 全內存緩存,效率高。無持久化設計,重啟系統或服務,數據會丟失 * 通過LRU算法刪除過期的緩存數據,采用SLAB內存分配機制 * 可支持分布式集群,通過web端程序或一致性hash算法等,讓每個節點獨立存儲數據,集群服務器之間互不通信 ### 5. 檢測過期與刪除機制 * 采用懶惰檢測機制。 不主動檢測item對象是否過期,而是在進行get操作的時候檢測item對象是否過期以及是否刪除。 * 采用懶惰刪除對象機制。 當對象要刪除時,僅僅做刪除標記,下次分配時直接使用,一般不會釋放內存空間。 * 當內存空間滿的時候,將會根據LRU算法把最近最少使用的item對象刪除 * 數據存入可以設定過期時間,但過期后不會立即刪除,懶惰檢測機制 * 如果不希望使用LRU算法,使用適用-M參數 ## 二、memcached內存管理 ### 1. slab內存管理機制流程 * 提前將大內存分配大小為1MB的若干個slab,然后針對每個slab再進行chunk填充,避免大量重復的初始化和清理,減去內存管理器的負擔。 * 相同尺寸的內存塊(chunk)組成組(chunks slab class),這些內存塊不會釋放,可以重復利用 * 新增數時,根據slab內空閑的chunk列表,以及接受到的數據大小,選擇最合適數據大小的slab分配一個能存下這個數據的最小內存塊(chunk),內存不會釋放而是重復利用。 ### 2. salb術語 * slab calss 內存區類別(48byte-1MB) * slab 動態穿件的實際內存區,即分配給slab的內存空間,默認1MB * slab classid slab class的ID * chunk 數據區塊,固定大小,chunk初始大小48bytes,相當于block * item 實際存儲在chunk的數據項 ### 3. slab內存管理機制特點 * 提前分配大內存slab,在進行小對象填充chunk * 避免大量重復的初始化和清理,減輕內存管理器的負擔 * 避免頻繁malloc/free內存分配導致的碎片 * chunk相當于block,但是chunk只在同一個slab class中才是相同大小的 ### 4. slab的缺點 * chunk存儲item浪費空間 * slab尾部空間剩余 * 可以在啟動memcached時指定增長因子(-f選項)來控制每組slab之間的差異 ## 三、企業場景 ### 1. 常規架構 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200308/193626993.png) ### 2. session會話共享 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200308/193634300.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看