<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 內存管理機制 在memcached內存結構中有兩個非常重要的概念:slab和chunk,如圖所示: ![](https://img.kancloud.cn/22/20/2220895bde1e2cd5b960cacbdd13c8bf_429x287.png) slab是一個內存塊,它是memcached一次申請內存的最小單位。在啟動memcached的時候一般會使用參數-m指定其可用內存,但是并不是在啟動的那一刻所有的內存就全部分配出去了,只有在需要的時候才會去申請,而且每次申請一定是一個slab。Slab的大小固定為1M(1048576 Byte),一個slab由若干個大小相等的chunk組成。每個chunk中都保存了一個item結構體、一對key和value。 雖然在同一個slab中chunk的大小相等的,但是在不同的slab中chunk的大小并不一定相等,在memcached中按照chunk的大小不同,可以把slab分為很多種類(class),默認情況下memcached把slab分為40類(class1~class40),在class 1中,chunk的大小為80字節,由于一個slab的大小是固定的1048576字節(1M),因此在class1中最多可以有13107個chunk(也就是這個slab能存最多13107個小于80字節的key-value數據)。 memcached內存管理采取預分配、分組管理的方式,分組管理就是我們上面提到的slab class,按照chunk的大小slab被分為很多種類。內存預分配過程是怎樣的呢?向memcached添加一個item時候,memcached首先會根據item的大小,來選擇最合適的slab class:例如item的大小為190字節,默認情況下class 4的chunk大小為160字節顯然不合適,class 5的chunk大小為200字節,大于190字節,因此該item將放在class 5中(顯然這里會有10字節的浪費是不可避免的),計算好所要放入的chunk之后,memcached會去檢查該類大小的chunk還有沒有空閑的,如果沒有,將會申請1M(1個slab)的空間并劃分為該種類chunk。例如我們第一次向memcached中放入一個190字節的item時,memcached會產生一個slab class 2(也叫一個page),并會用去一個chunk,剩余5241個chunk供下次有適合大小item時使用,當我們用完這所有的5242個chunk之后,下次再有一個在160~200字節之間的item添加進來時,memcached會再次產生一個class 5的slab(這樣就存在了2個pages) ### memcached內存管理特點 * chunk是在page里面劃分的,而page固定為1m,所以chunk最大不能超過1m。 * chunk實際占用內存要加48B,因為chunk數據結構本身需要占用48B。 * 如果用戶數據大于1m,則memcached會將其切割,放到多個chunk內。 * 已分配出去的page不能回收 > 對于key-value信息,最好不要超過1m的大小;同時信息長度最好相對是比較均衡穩定的,這樣能夠保障最大限度的使用內存;同時,memcached采用的LRU清理策略,合理甚至過期時間,提高命中率 無特殊場景下,key-value能滿足需求的前提下,使用memcached分布式集群是較好的選擇,搭建與操作使用都比較簡單;分布式集群在單點故障時,只影響小部分數據異常,目前還可以通過Magent緩存代理模式,做單點備份,提升高可用;整個緩存都是基于內存的,因此響應時間是很快,不需要額外的序列化、反序列化的程序,但同時由于基于內存,數據沒有持久化,集群故障重啟數據無法恢復。高版本的memcached已經支持CAS模式的原子操作,可以低成本的解決并發控制問題
                  <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>

                              哎呀哎呀视频在线观看