Memcached安裝與使用例項

oscar999發表於2020-04-06

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的值。

相關文章