Memcached安裝與使用實例

Memcached簡介

Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。

安裝與啓動

1.安裝Libevent

Libevent 是一個用C語言編寫的、輕量級的開源高性能事件通知庫。安裝命令:
yum install libevent libevent-deve
也可使用的源碼安裝方式。

2.安裝memcached

1). wget http://memcached.org/latest - 獲取最新版
下載的文件名是 latest, rename 一下(mv命令)

2) mv latest memcached-1.5.tar.gz

3) 安裝 tar -zxvf memcached-1.5.tar.gz

4)配置: ./configure –prefix=/usr/local/memcached-1.5.7
出現錯誤: no acceptable C compiler found in $PATH
沒有C編譯器, 安裝一個gcc
yum -y install gcc

5) 編譯 , 分別執行以下命令
./configure –prefix=/usr/local/memcached-1.5.7
make && make test
如果這一步出現error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory 的錯誤,見下面libevent安裝。
sudo make install

6)運行
cd /usr/local/memcached-1.5.7
命名行幫助:
bin/memcached -h
啓動選項:
-d是啓動一個守護進程;
-m是分配給Memcache使用的內存數量,單位是MB;
-u是運行Memcache的用戶;
-l是監聽的服務器IP地址,可以有多個地址;
-p是設置Memcache監聽的端口,,最好是1024以上的端口;
-c是最大運行的併發連接數,默認是1024;
-P是設置保存Memcache的pid文件
作爲後臺服務程序運行:
bin/memcached -p 11211 -m 64m -d
或者
bin/memcached -d -m 64M -u root -l xx.xx.xx.xx -p 11211 -c 256 -P /tmp/memcached.pid

至此,安裝啓動完成.

libevent安裝

查看是否安裝 libevent
ls -al /usr/lib | grep libevent

wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
./configure –prefix=/usr
sudo make
sudo make install

libevent會安裝到 /usr/lib 或 /usr/local/lib 下
測試libevent是否安裝成功:ls -al /usr/lib | grep libevent(或 ls -al /usr/local/lib | grep libevent)

如果libevent的安裝目錄爲/usr/local/lib下,則還需要建立 libevent-2.0.so.6 到 /usr/lib 的軟連接,這樣其他程序運行時才能找到libevent庫:
ln -s /usr/local/lib/libevent-2.0.so.6 /usr/lib/libevent-2.0.so.6

移除:
rpm -e libevent –nodeps

安裝問題解決

es: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
原因是:已經安裝了該共享庫, 但執行需要調用該共享庫的程序的時候, 程序按照默認共享庫路徑找不到該共享庫文件.
1) 如果共享庫文件安裝到了/lib或/usr/lib目錄下, 那麼需執行一下ldconfig命令
2) 如果共享庫文件安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它”非/lib或/usr/lib”目錄下, 那麼在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置文件/etc/ld.so.conf中, 如下:

cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
echo “/usr/local/lib” >> /etc/ld.so.conf
ldconfig
3) 如果共享庫文件安裝到了其它”非/lib或/usr/lib” 目錄下, 但是又不想在/etc/ld.so.conf中加路徑(或者是沒有權限加路徑). 那可以export一個全局變量LD_LIBRARY_PATH, 然後運行程序的時候就會去這個目錄中找共享庫.
LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設置多個搜索目錄, 這些目錄之間用冒號分隔開. 比如安裝了一個mysql到/usr/local/mysql目錄下, 其中有一大堆庫文件在/usr/local/mysql/lib下面, 則可以在.bashrc或.bash_profile或shell里加入以下語句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

命令端連接與使用

可以通過 telnet 命令並指定主機ip和端口來連接 Memcached 服務。

  1. telnet HOST PORT - 連接
  2. set foo 0 0 3 - 保存命令
  3. bar - 數據
  4. get foo - 取得命令
  5. quit - 退出

看不懂上面的部門, 沒關係, 接下來介紹Memcached 命令
存儲命令
1. set 命令
用於將 value(數據值) 存儲在指定的 key(鍵) 中。
如果set的key已經存在,該命令可以更新該key所對應的原來的數據,也就是實現更新的作用。

set key flags exptime bytes [noreply]

value
參數說明如下:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)

輸出信息說明:
STORED:保存成功後輸出。
ERROR:在保存失敗後輸出。

  1. add 命令
    Memcached add 命令用於將 value(數據值) 存儲在指定的 key(鍵) 中。
    如果 add 的 key 已經存在,則不會更新數據(過期的 key 會更新),之前的值將仍然保持相同,並且您將獲得響應

add key flags exptime bytes [noreply]

value

  1. replace 命令
    Memcached replace 命令用於替換已存在的 key(鍵) 的 value(數據值)。
    如果 key 不存在,則替換失敗,並且您將獲得響應 NOT_STORED。
    replace key flags exptime bytes [noreply]

value

  1. append命令
    Memcached append 命令用於向已存在 key(鍵) 的 value(數據值) 後面追加數據
    append key flags exptime bytes [noreply]

value

  1. prepend命令
    Memcached prepend 命令用於向已存在 key(鍵) 的 value(數據值) 前面追加數據 。
    prepend key flags exptime bytes [noreply]

value

  1. CAS命令
    Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用於執行一個”檢查並設置”的操作
    它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。
    檢查是通過cas_token參數進行的, 這個參數是Memcach指定給已經存在的元素的一個唯一的64位值。
    cas key flags exptime bytes unique_cas_token [noreply]
    v
    value

Java連接獲取值

jar檔地址:
https://code.google.com/archive/p/spymemcached/downloads

如果是使用maven的話, 直接在pom.xml中添加 dependency 是無法下載的。

把下載的jar copy 到 D:\temp目錄

mvn install:install-file -DgroupId=spy -DartifactId=memcached -Dversion=2.10.3 -Dpackaging=jar -Dfile=D:\temp\spymemcached-2.10.3.jar

再到pom.xml 添加以下部分:

spy
memcached
2.10.3

好了, 開始測試代碼了

/**
 * @Title: MemcachedTest.java
 * @Package com.oscar999
 * @Description: TODO
 * @author oscar999
 * @date May 7, 2018 3:10:19 PM
 * @version V1.0
 */

package com.oscar999;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.junit.Test;

import net.spy.memcached.MemcachedClient;

/**
 * @ClassName: MemcachedTest
 * @Description: TODO
 * @author oscar999
 */

public class MemcachedTest {

    @Test
    public void test() throws IOException {
        MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("172.21.145.77", 11211));
        System.out.println("Connection to server sucessful.");

        String s = (String) mcc.get("foo");
        System.out.println("foo in cache=" + s);
        mcc.shutdown();
    }
}

連接服務器, 並獲取foo的值。

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