Memcache緩存系統構建一


      在如今這個高效率的社會中,怎樣將這個高效率應用到自己的程序中,是一個值得追尋和值得探討的問題。因為這個memcache能夠很好的提高檢索速度,提升用戶體驗,而且重要的是減少數據庫的訪問。這就大大的提高了整個應用系統的檔次。因此,在應用程序的開發中加入這樣的一個技術無疑是給自己的程序錦上添花。瞬間就會顯得高大上,像現在很多的web應用,都將一些基礎信息直接放到遠程緩存系統中,而且該緩存中的key的有效時間也是可以進行任意設定的。這就顯得更加人性化,用起來更加方便!好了,廢話不多說,實踐是檢驗真理的唯一標准。

 作者:itRed      郵箱:it_red@sina.com       博客:http://www.cnblogs.com/itred 

 

一.關於Memcache:

      我認為在正式開始操作memcache之前還是應該了解一下即將要操作的這個是什么。Memcached基於一個存儲鍵/值對的hashmap。其守護進程是用C語言寫的,但是客戶端的應用操作上是可以用任何語言編寫,並通過memcached協議與守護進程通信。服務器端可以是windows,也可以是Linux。本博文將先介紹在windows下搭建和配置緩存服務器系統,在后面的博文中再進行介紹在linux中的安裝和配置。

memcached是高性能的分布式內存緩存服務器。相當於開辟一大塊兒內存用來存儲,一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。

      Memcached的官網:http://memcached.org/ ,任何版本和一些操作api都可以從上面下載。

二.安裝服務器端:

  1. 首先需要下載memcache的windows穩定版。即:有memcache.exe的文件,而這個的安裝並不是直接在windows下雙擊就開始安裝了,而是需要在dos命令行下,進行命令行形式的安裝;
  2. 將下載后的文件放到一個較近路徑下,這樣在dos下操作比較方便,我直接放到e盤目錄下的memcached文件夾下的memcached121文件夾下中;
  3. 安裝過程,首先是找到自己機器上的cmd.exe文件的路徑,一般情況下,windows中cmd.exe是在C盤/Windows/System32的文件中。直接進入這個文件中,然后找到cmd.exe,鼠標右鍵,以管理員身份運行這個程序,在打開的dos窗口中,輸入以下命令進行安裝:
>E:
>cd memcached
>cd memcached121
>memcached.exe –d install
>memcached.exe –d start

      安裝過程如圖示:

                

  4. 驗證安裝是否成功:

         待安裝完成后,需要驗證自己的memcache是否安裝成功,這個時候,打開windows的服務界面就可以查看到安裝后的memcache是否在列表中,並且可以看到該服務是否已經啟動。

         效果如圖:

         

 

  5. 此時安裝已經完成,我們可以先在dos下體驗一下緩存服務器的作用。打開dos窗口,輸入以下命令:

>telnet 127.0.0.1 11211

 

       注意這個的默認端口是11211

       

   輸入完成,確認后會進入緩存服務器的界面,然后就 可以用命令進行操作了。 

   基礎命令:

  格式:<command name> <key> <flags> <exptime> <bytes>
       <data block>

 

    解釋:

 

<command name>

set/add/replace/get 等

<key>

查找關鍵字

<flags>

客戶機使用它存儲關於鍵值對的額外信息

<exptime>

該數據的存活時間,0表示永遠

<bytes>

存儲字節數

<data block>

存儲的數據塊(可直接理解為key-value結構中的value)

 

    圖示:

     在緩存服務器上存儲username,有效時間是20s,當我在20秒時間內輸入get username 時,就會得到最開始設置的那個itRed值。相當於就是key-value ====》username-itRed  (鍵值對);但是,當username的有效期已經過了時,即超過20秒后,我再去取username的值時就會出現END,NULL空值。因為已經失效。如下圖所示:

   

  6. 接下來需要做的事用java程序進行操作:

        在myeclipse中新建一個java工程,導入jar包。如圖示:

                     

       貼出測試的源代碼,附上代碼注釋。運行后的測試結果完全和在dos下操作一樣。測試方法,運行程序后,在dos中用get方法查看是否能拿到開始設置的值。

package com.red.memcached;

import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

public class Cache {

    public static void main(String[] args) {

       MemCachedClient memcacheClient = new MemCachedClient();
       String[] address = { "127.0.0.1:11211" };//緩存服務器列表
       Integer[] weights = { 3 };
       SockIOPool pool = SockIOPool.getInstance();
       pool.setServers(address);
       pool.setWeights(weights);
       pool.setInitConn(5);
       pool.setMinConn(5);
       pool.setMaxConn(200);
       pool.setMaxIdle(1000 * 30 * 30); // 設置可用連接池的最長等待時間
       pool.setMaintSleep(30);
       pool.setNagle(false);

       // 設置是否使用Nagle算法,因為我們的通訊數據量通常都比較大(相對TCP控制數據)而且要求響應及時,因此該值需要設置為false(默認是true)
       pool.setSocketTO(30);// 設置socket的讀取等待超時值
       pool.setSocketConnectTO(0);
       pool.initialize();
// 將數據放入緩存
       memcacheClient.set("username", "Red");
 
       // 將數據放入緩存,並設置失效時間
       Date date = new Date(2000000);
       memcacheClient.set("user", "itRed", date);

       // 刪除緩存數據
      // memcacheClient.delete("user");
      // memcacheClient.delete("username");

       // 獲取緩存數據
       String str = (String) memcacheClient.get("username");
       System.out.println(str);
    }
}

 

      這個案例只是用java語言實現,其實是用memcached的客戶端可以用任何語言進行實現,如果你看懂了這個程序,但是你不知道如何將這個緩存加入到你的程序中?其實這是很好辦的,只需要將這個demo放入工具包中,將這個demo作為一個工具類,需要用的時候,只需要將這個調用這個方法就可以了。很簡單,是吧!哈哈。在下一篇博文中就會介紹在linux環境下搭建一個和這個一樣的memcached緩存系統。兩種相比之下,其實我認為第二種應該是目前很多公司都會采用的。

作者:itRed 
郵箱:it_red@sina.com 博客:http:
//www.cnblogs.com/itred ***版權聲明:
本文版權歸作者和博客園共有,歡迎轉載,但請在文章顯眼位置標明文章出處。未經本人書面同意,將其作為他用,本人保留追究責任的所有權利。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM