Memcache介紹、安裝、使用(三)

Memcache命令操作

五種基本 memcached 命令執行最簡單的操作:
set 、add、replace、 get、delete
前三個命令屬於對鍵值對修改,格式如下:command < key > < flags > < expiration time > < bytes > < value >


參數 內容
key key 用於查找緩存值
flags 可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息
expiration time 在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes 在緩存中存儲的字節點
value 存儲的值(始終位於第二行)


發現指定bytes參數,必須設值要足額纔算執行完成。

set

set 命令用於向緩存添加新的鍵值對。如果鍵已經存在,則之前的值將被替換。

set userId 0 0 5
12345
STORED

set 命令正確設定了鍵值對,服務器將使用單詞 STORED 進行響應

add

僅當緩存中不存在鍵時,add 命令纔會向緩存中添加一個鍵值對。如果緩存中已經存在鍵,則之前的值將仍然保持相同,並且您將獲得響應 NOT_STORED

replace

僅當鍵已經存在時,replace 命令纔會替換緩存中的鍵。如果緩存中不存在鍵,那麼您將從 memcached 服務器接受到一條 NOT_STORED 響應
最後兩個基本命令是 get 和 delete
命令格式:command < key >

get

命令用於檢索與之前添加的鍵值對相關的值,如果這個鍵存在於緩存中,則返回相應的值。如果不存在,則不返回任何內容。
Get可以取一個或多個鍵值,由空格隔開的字串 get key1 key2

set userId 0 0 5
12345
STORED

get userId
VALUE userId 0 5
12345
END

delete

delete 命令用於刪除 memcached 中的任何現有值, 使用一個鍵調用 delete,如果該鍵存在於緩存中,則刪除該值。如果不存在,則返回一條 NOT_FOUND 消息

set userId 0 0 5
98765
STORED

delete bob
NOT_FOUND

delete userId
DELETED

incr

爲特定的鍵增 1 或特定的值。只適用於數值 incr key value

set num 0 0 2
11
STORED
incr num 3
14
get num
VALUE num 0 2
14
END

decr

爲特定的鍵減 1 或特定的值。只適用於數值 decr key value

set num 0 0 2
14
decr num 6
8
get num
VALUE num 0 2
8

高級 memcached 客戶機命令

gets , cas , stats

stats

stats 命令的功能正如其名:轉儲所連接的 memcached 實例的當前統計數據。
可用stats命令查看緩存系統詳情:

stats
STAT pid 5198               pid       //Memcached進程ID
STAT uptime 1852            uptime   //Memcached運行時間,單位:秒
STAT time 1445235207        time   //Memcached當前的UNIX時間
STAT version 1.4.24         version  //Memcached的版本號
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.040002       rusage_user  //該進程累計的用戶時間,單位:秒
STAT rusage_system 0.036002 rusage_system  //該進程累計的系統時間,單位:秒
STAT curr_connections 5         curr_connections   //當前連接數量
STAT total_connections 6        total_connections   //Memcached運行以來接受的連接總數
STAT connection_structures 6        connection_structures  //Memcache分配的連接結構的數量
STAT reserved_fds 20
STAT cmd_get 1              cmd_get   //查詢請求總數
STAT cmd_set 1              cmd_set  //存儲(添加/更新)請求總數
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0             get_hits  //查詢成功獲取數據的總次數
STAT get_misses 1               get_misses  //查詢成功未獲取到數據的總次數
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 113         bytes_read  //Memcached從網絡讀取到的總字節數
STAT bytes_written 114          bytes_written  //Memcached向網絡發送的總字節數
STAT limit_maxbytes 104857600   limit_maxbytes  //Memcached在存儲時被允許使用的字節總數
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 0                    bytes  //Memcached當前存儲內容所佔用的字節數
STAT curr_items 0               curr_items  //Memcached當前存儲的內容數量
STAT total_items 0              total_items   //Memcached啓動以來存儲過的內容總數
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END

stats items

列出所有key

STAT items:1:number 4
STAT items:1:age 2460
STAT items:4:number 1
STAT items:4:age 2649
…
END
Items :  itemsid  :  number  itemid中保存的key個數

stats cachedump itemid length

通過itemid獲取key,基於列出的items id,本例中爲7,第2個參數爲列出的長度,0爲全部列出

stats cachedump 1 0
ITEM mm [8 b; 1445237370 s]
ITEM key001 [15 b; 1445240439 s]
ITEM key01 [5 b; 1445237370 s]
ITEM userid [5 b; 1445237370 s]
END
stats cachedump 4 0
ITEM MemUser [87 b; 1445240439 s]
END

flush_all

flush_all 是最後一個要介紹的命令。這個最簡單的命令僅用於清理緩存中的所有名稱/值對。如果您需要將緩存重置到乾淨的狀態,則 flush_all 能提供很大的用處
flush_all 實際上沒有立即釋放項目所佔用的內存,而是在隨後陸續有新的項目被儲存時執行

version

返回服務器版本

version
VERSION 1.4.24

quit

命令沒有參數
接收此命令後,服務器關閉連接。不過,客戶端可以在不再需要時,簡單地關閉連接就行,並不一定需要發送這個命令

quit
Connection closed by foreign host.

Memcache緩存性能

確定緩存效率的一種方法查看緩存的命中率(hit ratio)緩存命中率表示執行 get 的次數與錯過 get 的次數的百分比, 用 get_hits 的數值除以 cmd_gets。

Memcached正確使用

memcached 並不安全

爲了確保最佳性能,memcached 並未提供任何形式的安全性,沒有身份驗證,也沒有加密。這意味着對 memcached 服務器的訪問應該這麼處理:一是通過將它們放到應用程序部署環境相同的私有側,二是如果安全性是必須的,那麼就使用 UNIX® socket 並只允許當前主機上的應用程序訪問此 memcached 服務器。

這多少犧牲了一些靈活性和彈性,以及跨網絡上的多臺機器共享 RAM 緩存的能力,但這是在目前的情況下確保 memcached 數據安全性的惟一一種解決方案。

不要緩存數據庫行或文件

雖然可以使用 memcached 存儲加載自數據庫的數據行,但這實際上是查詢緩存,並且大多數數據庫都提供各自的查詢緩存的機制。其他的對象,比如文件系統的圖像或文件的情況與此相同。很多應用程序和 web 服務器針對此類工作已經有了一些很好的解決方案。

如果在加載和格式化後,使用它來存儲全部信息塊,就可以從 memcached 獲得更多的實用工具和性能上的改善。以博客站點爲例,存儲信息的最佳點是在將博客類別格式化爲對象,甚至是在格式化成 HTML 後。博客頁面的構造可通過從 memcached 加載各個組件(比如 blog post、category list、post history 等)並將完成的 HTML 寫回至客戶機實現。

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