memcache簡介以及使用方法


memcache是一套分佈式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著[1]  。這是一套開放源代碼軟件,以BSD license授權發佈。


MemCache的工作流程如下:先檢查客戶端的請求數據是否在memcached中,如有,直接把請求數據返回,不再對數據庫進行任何操作;如果請求的數據不在memcached中,就去查數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(memcached客戶端不負責,需要程序明確實現);每次更新數據庫的同時更新memcached中的數據,保證一致性;當分配給memcached內存空間用完之後,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,然後再替換掉最近未使用的數據。[2] 
Memcache是一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像視頻文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。
Memcache是danga的一個項目,最早是LiveJournal 服務的,最初爲了加速 LiveJournal 訪問速度而開發的,後來被很多大型的網站採用。
Memcached是以守護程序(監聽)方式運行於一個或多個服務器中,隨時會接收客戶端連接和操作。

在 Memcached中可以保存的item數據量是沒有限制的,只要內存足夠 。


memcached是鍵值一一對應,key默認最大不能超過128個字 節,value默認大小是1M,也就是一個slabs,如果要存2M的值(連續的),不能用兩個slabs,因爲兩個slabs不是連續的,無法在內存中 存儲,故需要修改slabs的大小,多個key和value進行存儲時,即使這個slabs沒有利用完,那麼也不會存放別的數據。


下面是一個完整的java的memcached的例子。

package com.dert.memcache;


import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;


public class MemcacheTest {


/**
* @param args
*/
public static void main(String[] args) {

  /**


       * 初始化SockIOPool,管理memcached的連接池


       * */


      String[] servers = { "127.0.0.1:11211" };


      SockIOPool pool = SockIOPool.getInstance();


      pool.setServers(servers);


      pool.setFailover(true);


      pool.setInitConn(10);


      pool.setMinConn(5);


      pool.setMaxConn(250);


      pool.setMaintSleep(30);


      pool.setNagle(false);


      pool.setSocketTO(3000);


      pool.setAliveCheck(true);


      pool.initialize();


      
      /**


       * 建立MemcachedClient實例


       * */
      MemCachedClient memCachedClient = new MemCachedClient();
      System.out.println("memCacheClient");
      for (int i = 0; i < 1000; i++) {


          /**


           * 將對象加入到memcached緩存


           * */


          boolean success = memCachedClient.set("" + i, "Hello!");
          System.out.println("memCacheClient");
          /**


           * 從memcached緩存中按key值取對象


           * */


          String result = (String) memCachedClient.get("" + i);
          System.out.println(String.format("set( %d ): %s", i, success));
          System.out.println(String.format("get( %d ): %s", i, result));
      
      }
   }
}

首先,我們需要在windows上面正確安裝上面memcached服務器程序,並且啓動服務器,

然後下載memcached的jar包,一共有4個,然後上面的程序就能正確運行。

正確的結果,都是true,如果不對,那就會打印出false。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章