1. 程式人生 > >memcache基礎入門

memcache基礎入門

介紹

  1. 分散式快取記憶體系統,訪問壓力大,作為快取層,緩解壓力

  2. key,value,用來儲存小塊的任意資料(字串,物件),不支援LIst,array資料格式

  3. 非持久化儲存:丟失對系統也不會產生影響,斷電記憶體會被清除

  4. 分散式儲存:不適合單機使用。可以專門一臺伺服器作為memcache的部署,不要和應用部署在一起,很佔記憶體。

過程:首次訪問:從RDBMS中取得資料儲存到memcached;第二次後,從memcached中取得資料顯示頁面。

安裝

在mac上安裝的時候遇到了很多的問題,記錄下來,需要的同學方便檢視,不要浪費這麼的時間。

安裝方法

1.編譯安裝 libevent memcache
2.可以使用包依賴管理工具:yum(centos),apt-get(ubuntu)
3.mac上使用brew來進行安裝

mac具體安裝步驟

  1. brew install libevent
  2. brew install memcached

提示該使用者名稱目錄沒有許可權,用 whoami 檢視當前使用者名稱,執行命令sudo chown -R haojianfen /usr/local/Cellar ,正常此時就可以了。但提示(Operation not permitted問題),由於macos的系統版本過高,可以執行以下命令來解除安裝和重新安裝最新版本的brew可以成功安裝libevent和memcached了。

brew命令的安裝和解除安裝
解除安裝:/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”

安裝:/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

注意:memcached是memcache的高階版本,建議學習memcached。

命令的學習

連線memcached

telnet host port,例如:telnet 127.0.0.1 1211
在這裡插入圖片描述


順便記錄一下登入mysql:
在這裡插入圖片描述

啟動memcached

brew services start memcached

Memcached儲存

set命令

memcache儲存,如果key存在則更新現有value。

set key flags exptime bytes value
flags:可以包括鍵值對的整型引數(32位無符號整數),客戶機使用它儲存關於鍵值對的額外資訊 ,把並沿資料返回伺服器儲存
exptime:以秒為單位,0標識永遠
bytes:資料儲存的位元組數

例子:如果是2,則value必須輸入2個字元
set a 0 900 2
sh
此時返回STORED:表示成功;ERROR:表示有問題。

add命令

這個和set的區別,如果存在key且沒有過期,就不進行更新,此時提示NOT_STORED。

replace命令

替換對應key的value值,如果不存在key,則輸出NOT_STORED;

append命令

在對應的key後邊追加值。如果不存在key,則輸出NOT_STORED;

prepend命令

在對應key的前邊追加值。如果不存在key,則輸出NOT_STORED;

cas命令

cas key flags exptime bytes unique_cas_token [noreply]
value
要在Memcached上使用CAS命令,你需要從Memcached服務商通過gets命令獲取令牌(token)。
CAS命令僅在當前客戶端最後一次取值後到修改該key時,這中間的時間段內該key沒有被其他客戶端修改的情況下, 才能夠將值寫入。

cas tp 0 99 9
ERROR:缺少token

cas tp 0 900 9 2
memcached
NOT_FOUND:鍵tp不存在

set tp 0 900 9
memcached
STORED

gets tp
VALUE tp 0 9 1
memcached
END

cas tp 0 900 5 1
redis
STORED

get tp
VALUE tp 0 5
redis
END

查詢命令

get命令

get key1 key2 key3

gets命令

獲取帶有CAS令牌存的value(資料值),如果key不存在,則返回空。
value行最後一列是CAS令牌
在這裡插入圖片描述

delete命令

delete key :返回DELETED表示刪除成功

incr和decr命令

用於已存在的key(鍵)的數字進行自增或自減操作。
incr與decr命令操作的資料必須是十進位制的32位無符號整數。
如果key不存在返回NOT_FOUND,如果鍵的值不為數字,則返回CLIENT_ERROR
在這裡插入圖片描述

統計命令

stats命令

stats
Memcached stats命令用於返回統計資訊例如PID(程序號)、版本號、連線數等。
http://www.runoob.com/memcached/memcached-stats.html 詳見參考

stats items命令

stats items命令用於顯示各個slab中item的數目和儲存時長(最後一次訪問距現在的秒數)

stats slabs命令

用於顯示各個slab的資訊,包括chunk的大小,數目,使用情況等。

stats sizes命令

用於顯示item的大小和個數。

flush_all命令

用於在指定時間清理快取操作。
flush_all [time] [noreply]

java memcached

 try {
            //連線
            MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("127.0.0.1",11211));
            System.out.println("connect successfully");

            //set get
            Future future = memcachedClient.set("a",900,"memcached");
            System.out.println("status:"+ future.get());
            System.out.println("get a:"+ memcachedClient.get("a"));

            //add
            Future future1 = memcachedClient.add("b",900,"bb");

            //gets cas
            CASValue casValue = memcachedClient.gets("a");
            CASResponse response =memcachedClient.cas("a",casValue.getCas(),"redis");
            System.out.println("修改後a的值:"+memcachedClient.get("a"));

            //delete
            memcachedClient.delete("v");

            //統計
            //stats
            System.out.println("stats:"+memcachedClient.getStats());

            //清除資料
            System.out.println("stats items:"+memcachedClient.flush());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }