<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jojo's blog--快樂憂傷都與你同在
    為夢想而來,為自由而生。 性情若水,風起水興,風息水止,故時而激蕩,時又清平……
    posts - 11,  comments - 30,  trackbacks - 0

     1       Memcache是什么

    Memcachedanga.com的一個項目,最早是為 LiveJournal 服務的,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。

    它可以應對任意多個連接,使用非阻塞的網絡IO。由于它的工作機制是在內存中開辟一塊空間,然后建立一個HashTableMemcached自管理這些HashTable

       

    為什么會有Memcachememcached兩種名稱?

    其實Memcache是這個項目的名稱,而memcached是它服務器端的主程序文件名,

        

    Memcache官方網站:http://www.danga.com/memcached

    2       Memcache工作原理

    首先 memcached 是以守護程序方式運行于一個或多個服務器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客戶端在與 memcached 服務建立連接之后,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內存中的,并不是保存在 cache 文件中的,這也是為什么 memcached 能夠如此高效快速的原因。注意,這些對象并不是持久的,服務停止之后,里邊的數據就會丟失。

    與許多 cache 工具類似,Memcached 的原理并不復雜。它采用了C/S的模式,在 server 端啟動服務進程,在啟動時可以指定監聽的 ip,自己的端口號,所使用的內存大小等幾個關鍵參數。一旦啟動,服務就一直處于可用狀態。Memcached 的目前版本是通過C實現,采用了單進程,單線程,異步I/O,基于事件 (event_based) 的服務方式.使用 libevent 作為事件通知實現。多個 Server 可以協同工作,但這些 Server 之間是沒有任何通訊聯系的,每個 Server 只是對自己的數據進行管理。Client 端通過指定 Server 端的 ip 地址(通過域名應該也可以)。需要緩存的對象或數據是以 key->value 對的形式保存在Server端。key 的值通過 hash 進行轉換,根據 hash 值把 value 傳遞到對應的具體的某個 Server 上。當需要獲取對象數據時,也根據 key 進行。首先對 key 進行 hash,通過獲得的值可以確定它被保存在了哪臺 Server 上,然后再向該 Server 發出請求。Client 端只需要知道保存 hash(key) 的值在哪臺服務器上就可以了。

            其實說到底,memcache 的工作就是在專門的機器的內存里維護一張巨大的 hash 表,來存儲經常被讀寫的一些數組與文件,從而極大的提高網站的運行效率。

    3       如何使用

    • 建立Manager類

      
    Java代碼
    1. package com.alisoft.sme.memcached;  
    2.   
    3. import java.util.Date;  
    4.   
    5. import com.danga.MemCached.MemCachedClient;  
    6. import com.danga.MemCached.SockIOPool;  
    7.   
    8. public class MemCachedManager {  
    9.   
    10.     // 創建全局的唯一實例  
    11.     protected static MemCachedClient mcc = new MemCachedClient();  
    12.   
    13.     protected static MemCachedManager memCachedManager = new MemCachedManager();  
    14.   
    15.     // 設置與緩存服務器的連接池  
    16.     static {  
    17.         // 服務器列表和其權重  
    18.         String[] servers = { "127.0.0.1:11211" };  
    19.         Integer[] weights = { 3 };  
    20.   
    21.         // 獲取socke連接池的實例對象  
    22.         SockIOPool pool = SockIOPool.getInstance();  
    23.   
    24.         // 設置服務器信息  
    25.         pool.setServers(servers);  
    26.         pool.setWeights(weights);  
    27.   
    28.         // 設置初始連接數、最小和最大連接數以及最大處理時間  
    29.         pool.setInitConn(5);  
    30.         pool.setMinConn(5);  
    31.         pool.setMaxConn(250);  
    32.         pool.setMaxIdle(1000 * 60 * 60 * 6);  
    33.   
    34.         // 設置主線程的睡眠時間  
    35.         pool.setMaintSleep(30);  
    36.   
    37.         // 設置TCP的參數,連接超時等  
    38.         pool.setNagle(false);  
    39.         pool.setSocketTO(3000);  
    40.         pool.setSocketConnectTO(0);  
    41.   
    42.         // 初始化連接池  
    43.         pool.initialize();  
    44.   
    45.         // 壓縮設置,超過指定大小(單位為K)的數據都會被壓縮  
    46.         mcc.setCompressEnable(true);  
    47.         mcc.setCompressThreshold(64 * 1024);  
    48.     }  
    49.   
    50.     /** 
    51.      * 保護型構造方法,不允許實例化! 
    52.      *  
    53.      */  
    54.     protected MemCachedManager() {  
    55.   
    56.     }  
    57.   
    58.     /** 
    59.      * 獲取唯一實例. 
    60.      *  
    61.      * @return 
    62.      */  
    63.     public static MemCachedManager getInstance() {  
    64.         return memCachedManager;  
    65.     }  
    66.   
    67.     /** 
    68.      * 添加一個指定的值到緩存中. 
    69.      *  
    70.      * @param key 
    71.      * @param value 
    72.      * @return 
    73.      */  
    74.     public boolean add(String key, Object value) {  
    75.         return mcc.add(key, value);  
    76.     }  
    77.   
    78.     public boolean add(String key, Object value, Date expiry) {  
    79.         return mcc.add(key, value, expiry);  
    80.     }  
    81.   
    82.     public boolean replace(String key, Object value) {  
    83.         return mcc.replace(key, value);  
    84.     }  
    85.   
    86.     public boolean replace(String key, Object value, Date expiry) {  
    87.         return mcc.replace(key, value, expiry);  
    88.     }  
    89.   
    90.     /** 
    91.      * 根據指定的關鍵字獲取對象. 
    92.      *  
    93.      * @param key 
    94.      * @return 
    95.      */  
    96.     public Object get(String key) {  
    97.         return mcc.get(key);  
    98.     }  
    99.   
    100.     public static void main(String[] args) {  
    101.         MemCachedManager cache = MemCachedManager.getInstance();  
    102.         cache.add("hello", 234);  
    103.         System.out.print("get value : " + cache.get("hello"));  
    104.     }  
    105. }  

     建立數據對象

    Java代碼
    1. package com.alisoft.sme.memcached;  
    2.   
    3. import java.io.Serializable;  
    4.   
    5. public class TBean implements Serializable {  
    6.       
    7.     private static final long serialVersionUID = 1945562032261336919L;  
    8.   
    9.     private String name;  
    10.   
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.   
    15.     public void setName(String name) {  
    16.         this.name = name;  
    17.     }  
    18. }  
    Java代碼
    1. <pre name="code" class="java"> </pre>  
    2.   
    3. <h2 style="margin: 13pt 0cm 13pt 28.8pt;"><span style="" lang="EN-US"><span style=""><span style="font-family: 'Times New Roman';">   </span></span></span><span style=""><span style="font-size: large;">創建測試用例</span></span></h2>  
    4. <h2 style="margin: 13pt 0cm 13pt 28.8pt;"> </h2>  
    5. <pre name="code" class="java">package com.alisoft.sme.memcached.test;  
    6.   
    7. import junit.framework.TestCase;  
    8.   
    9. import org.junit.Test;  
    10.   
    11. import com.alisoft.sme.memcached.MemCachedManager;  
    12. import com.alisoft.sme.memcached.TBean;  
    13.   
    14. public class TestMemcached extends TestCase {  
    15.   
    16.     private static MemCachedManager cache;  
    17.   
    18.     @Test  
    19.     public void testCache() {  
    20.           
    21.         TBean tb = new TBean();  
    22.         tb.setName("E網打進");  
    23.         cache.add("bean", tb);  
    24.           
    25.         TBean tb1 = (TBean) cache.get("bean");  
    26.         System.out.println("name=" + tb1.getName());  
    27.         tb1.setName("E網打進_修改的");  
    28.           
    29.         tb1 = (TBean) cache.get("bean");  
    30.         System.out.println("name=" + tb1.getName());  
    31.     }  
    32.   
    33.     @Override  
    34.     protected void setUp() throws Exception {  
    35.         super.setUp();  
    36.         cache = MemCachedManager.getInstance();  
    37.     }  
    38.   
    39.     @Override  
    40.     protected void tearDown() throws Exception {  
    41.         super.tearDown();  
    42.         cache = null;  
    43.     }  
    44.   
    45. }  
    46. </pre>  
    47. <h2 style="margin: 13pt 0cm 13pt 28.8pt;"> <span style="">測試結果</span></h2>  
    48. <h2 style="margin: 13pt 0cm 13pt 28.8pt;"><span style="">  
    49. <pre name="code" class="java">[INFO] ++++ serializing for key: bean for class: com.alisoft.sme.memcached.TBean  
    50. [INFO] ++++ memcache cmd (result code): add bean 8 0 93 (NOT_STORED)  
    51. [INFO] ++++ data not stored in cache for key: bean  
    52. [INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean  
    53. name=E網打進  
    54. [INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean  
    55. name=E網打進  
    56. </pre>  
    57.  </span></h2>  
    58.        
    posted on 2009-05-07 13:51 Blog of JoJo 閱讀(21541) 評論(1)  編輯  收藏 所屬分類: Linux 技術相關

    FeedBack:
    # re: Memcache工作原理
    2009-05-07 13:54 | Blog of JoJo
    memcache是一個高性能的分布式的內存對象緩存系統,可以用來構建大負載的網站,來分擔數據庫的壓力。在這里我們要非常注意三點:

    * 分布式:具我目前了解,memcache作為分布式緩存系統的一種方法是首先啟動多個memcache進程,這些進程可以在不同的主機的不同端口上。memcache的分布式方法可以在N個前端主機上跑memcache進程,可以應付足夠大的緩存數據,提高了訪問獲取數據的速度。
    * 內存對象:memcache的工作機制是通過在內存里維護一個統一的巨大的hash表,用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等
    * 緩存:一個好多緩存機制,可以給一個程序帶來意想不到的性能提高,這個就不用多說了。

    memcache的優點:一般情況下,緩存系統,我們最注重的性能,不然我們用它來做啥呢?然后就是在管理維護方面,因為是要人來操作的,所以需要它能夠穩定的運行以及不能讓人發狂的配置。  回復  更多評論
      

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV色吊丝无码| 色窝窝亚洲av网| 野花高清在线电影观看免费视频 | 久久久久亚洲av无码专区| 30岁的女人韩剧免费观看| 亚洲AV色欲色欲WWW| 亚洲国产第一站精品蜜芽| 成视频年人黄网站免费视频| 色一情一乱一伦一视频免费看| 久久夜色精品国产亚洲 | 亚洲一区二区三区影院 | 一二三四免费观看在线视频中文版| 免费无码国产在线观国内自拍中文字幕| 一本久久a久久精品亚洲| 成人网站免费观看| 人妻在线日韩免费视频| 亚洲精品美女久久久久久久| 亚洲色精品vr一区二区三区| 免费无码又爽又刺激毛片| 国产午夜精品久久久久免费视| 国产亚洲美女精品久久| 亚洲明星合成图综合区在线| 亚洲 无码 在线 专区| 免费看韩国黄a片在线观看| 国产成人一区二区三区视频免费| 国产精品亚洲天堂| 亚洲国产美女在线观看| 亚洲熟妇中文字幕五十中出| 在线A级毛片无码免费真人| 91高清免费国产自产拍2021| 一区二区三区在线免费| 亚洲级αV无码毛片久久精品| 美女内射无套日韩免费播放| 国产 亚洲 中文在线 字幕| 亚洲AV成人潮喷综合网| 麻豆成人久久精品二区三区免费| 亚洲成AV人片在WWW| 精品亚洲综合久久中文字幕| 最近中文字幕免费mv视频7| 国产免费牲交视频免费播放| 亚洲欧美成人综合久久久|