淺談Mamcached集成web項目

1.資源文件配置
config.properties
添加
#memcached服務器地址
memchchedIP=192.168.1.8
2.編寫工具類
MemUtils
package cn.com.atobo.adm.utils;
 
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
 
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
 
/**
 * memcached 緩存服務器
 * @author guowb
 * @date 2015-8-25 下午6:30:00
 */
public class MemUtils {
    private static Logger logger = Logger.getLogger(MemUtils.class);
 
    private static MemCachedClient mcc = new MemCachedClient();
 
    /** 3600 秒 */
    private static final Integer EXPIRE = 3600;
 
    static {
        SockIOPool pool = SockIOPool.getInstance();// 獲取鏈接池的實例
        String memCached = ResourceUtil.getConfigValueByKey("memchchedIP");// memcached服務器
        pool.setServers(new String[] { memCached + ":11211" });
        pool.setWeights(new Integer[] { 1 });// 權重
 
        pool.setInitConn(10);// 初始鏈接
        pool.setMinConn(10); // 最小鏈接
        pool.setMaxConn(1000);// 最大鏈接
        pool.setMaxIdle(1000 * 60 * 60);// 最大等待
        pool.setMaintSleep(60);// 睡眠時間
        pool.setNagle(false);
        pool.setSocketTO(3000);// 鏈接超時  3秒
        pool.setSocketConnectTO(0);
        pool.initialize(); // 初始化並啓動鏈接池
    }
 
    /**
     * 添加值 ,存在則添加失敗
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:18:06
     */
    public static boolean add(String key, Object value) {
        if(StringUtils.isNotBlank(key)){
            logger.info("new add :key=" + key);
            return mcc.add(key, value, EXPIRE);
        }
        return false;
    }
 
    /**
     * 添加值,存在則替換
     * 若是爲用戶登錄時產生的數據,則"user"+用戶ID
     * 若是爲用戶沒有登錄時產品的數據,則key 由MemcachedBean控制
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:28:49
     */
    public static boolean set(String key, Object value) {
        logger.info("set value :key=" + key);
        return mcc.set(key, value, EXPIRE);
    }
 
    /**
     * 替換值,不存在則替換失敗
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:29:08
     */
    public static boolean replace(String key, Object value) {
        logger.info("replace :key=" + key);
        return mcc.replace(key, value, EXPIRE);
    }
 
    /**
     * 取出值
     * 
     * @author langwenjie
     * @date 2015-8-25 下午4:30:33
     */
    public static Object get(String key) {
        Object object = mcc.get(key);
        logger.info("key :" + key + " value :" + (object!=null));
        return object;
    }
 
    /**
     * 刪除值
     * 
     * @author langwenjie
     * @date 2015-8-25 下午5:51:32
     */
    public static boolean delete(String key) {
        logger.info("delete :" + key);
        return mcc.delete(key);
    }
 
}
3.項目中直接調用
4.服務器上安裝memcached 流程

1. 準備安裝文件node

下載memcached與libevent的安裝文件linux

http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz(memcached下載地址)git

https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz(libevent下載地址)github

 

2. 具體安裝步驟apache

1.因爲memcached依賴於libevent,所以須要安裝libevent。因爲linux系統可能默認已經安裝libevent,執行命令:緩存

rpm -qa|grep libevent服務器

查看系統是否帶有該安裝軟件,若是有執行命令:網絡

rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(因爲系統自帶的版本舊,忽略依賴刪除)併發

 

3. 安裝libevent命令:memcached

tar zxvf libevent-2.0.21-stable.tar.gz

  cd libevent-2.0.21-stable

  ./configure --prefix=/usr/local/libevent

  make

  make install

至此libevent安裝完畢;

安裝過程當中出現:configure: error : no acceptable C compiler found in $PATH錯誤時是沒有安裝gcc,運行以下命令:

yum install gcc* make*

 

4. 安裝memcached命令:

tar zxvf memcached-1.4.2.tar.gz

  cd memcached-memcached-1.4.2

        ./configure --prefix=/usr/local/memcached --with-libevent=

/usr/local/libevent/

make

make install

  至此memcached安裝完畢;

 

5.當啓動memcached時常常不能發現libevent.so;能夠經過如下命令檢查:

   進入/usr/local/memcached/bin目錄

   LD_DEBUG=help ./memcached -v

   LD_DEBUG=libs  ./ memcached -v

   解決方法:

   ln -s /usr/local/libevent/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5

 

6. 啓動memcached

1.打開一個終端,輸入如下命令:

./usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

 

啓動參數說明:

-d 選項是啓動一個守護進程。

-u root 表示啓動memcached的用戶爲root。

-m 是分配給Memcache使用的內存數量,單位是MB,默認64MB。

-M return error on memory exhausted (rather than removing items)。

-u 是運行Memcache的用戶,若是當前爲root 的話,須要使用此參數指定用戶。

-p 是設置Memcache的TCP監聽的端口,最好是1024以上的端口。

-c 選項是最大運行的併發鏈接數,默認是1024。

-P 是設置保存Memcache的pid文件。

 

另外還有個更詳細的參數說明:

Param代碼   收藏代碼
  1. memcached 1.4.2  
  2. -p       監聽的TCP端口(默認: 11211)  
  3. -U       監聽的UDP端口(默認: 11211, 0表示不監聽)  
  4. -s      用於監聽的UNIX套接字路徑(禁用網絡支持)  
  5. -a      UNIX套接字訪問掩碼,八進制數字(默認:0700)  
  6. -l   監聽的IP地址。(默認:INADDR_ANY,全部地址)  
  7. -d            做爲守護進程來運行。  
  8. -r            最大核心文件限制。  
  9. -u  設定進程所屬用戶。(只有root用戶可使用這個參數)  
  10. -m       單個數據項的最大可用內存,以MB爲單位。(默認:64MB)  
  11. -M            內存用光時報錯。(不會刪除數據)  
  12. -c       最大併發鏈接數。(默認:1024)  
  13. -k            鎖定全部內存頁。注意你能夠鎖定的內存上限。  
  14.               試圖分配更多內存會失敗的,因此留意啓動守護進程時所用的用戶可分配的內存上限。  
  15.               (不是前面的 -u  參數;在sh下,使用命令"ulimit -S -l NUM_KB"來設置。)  
  16. -v            提示信息(在事件循環中打印錯誤/警告信息。)  
  17. -vv           詳細信息(還打印客戶端命令/響應)  
  18. -vvv          超詳細信息(還打印內部狀態的變化)  
  19. -h            打印這個幫助信息並退出。  
  20. -i            打印memcached和libevent的許可。  
  21. -P      保存進程ID到指定文件,只有在使用 -d 選項的時候纔有意義。  
  22. -f    塊大小增加因子。(默認:1.25)  
  23. -n     分配給key+value+flags的最小空間(默認:48)  
  24. -L            嘗試使用大內存頁(若是可用的話)。提升內存頁尺寸能夠減小"頁表緩衝(TLB)"丟失次數,提升運行效率。  
  25.               爲了從操做系統得到大內存頁,memcached會把所有數據項分配到一個大區塊。  
  26. -D      使用  做爲前綴和ID的分隔符。  
  27.               這個用於按前綴得到狀態報告。默認是":"(冒號)。  
  28.               若是指定了這個參數,則狀態收集會自動開啓;若是沒指定,則須要用命令"stats detail on"來開啓。  
  29. -t       使用的線程數(默認:4)  
  30. -R            每一個鏈接可處理的最大請求數。  
  31. -C            禁用CAS。  
  32. -b            設置後臺日誌隊列的長度(默認:1024)  
  33. -B            綁定協議 - 可能值:ascii,binary,auto(默認)  
  34. -I            重寫每一個數據頁尺寸。調整數據項最大尺寸。  

也能夠啓動多個守護進程,可是端口不能重複

查看memcached啓動命令

ps aux|grep memcached

7.中止Memcache進程:   kill `cat /tmp/memcached.pid`

相關文章
相關標籤/搜索