Memcache Basics

Memcached
  • 開源 高性能 分布式內(nèi)存對象緩存系統(tǒng)
  • key-value存儲系統(tǒng), 用來存儲小塊的任意數(shù)據(jù)(字符串、對象)
  • 通過緩存數(shù)據(jù)庫查詢結(jié)果账锹,減少數(shù)據(jù)庫訪問次數(shù)深寥,以提高動態(tài)Web應(yīng)用的速度潮酒、提高可擴(kuò)展性义屏。
特征
  • 協(xié)議簡單(基于文本行的協(xié)議)
  • 基于libevent的事件處理
  • 內(nèi)置內(nèi)存存儲方式
  • Memcached不相互通信的分布式
注: 
由于數(shù)據(jù)保存在內(nèi)置的內(nèi)存存儲空間中舞箍,所以重啟memcached會導(dǎo)致全部數(shù)據(jù)消失;
內(nèi)容容量達(dá)到指定值之后舰褪,就基于LRU算法自動刪除不使用的緩存;
Memcached服務(wù)器端沒有分布式功能,這完全取決于客戶端的實現(xiàn)疏橄。
啟動參數(shù)
  • -p 使用端口占拍,默認(rèn)11211
  • -m 最大內(nèi)存大小,默認(rèn)64M
  • -vv 用very verbose模式啟動捎迫,調(diào)試信息和錯誤輸出到控制臺
  • -d 作為daemon在后臺啟動
安裝/啟動
$ sudo apt-get install memcached # 安裝
$ memcached -p 11211 64m -vv  # 顯示了調(diào)試信息晃酒。這樣就在前臺啟動了memcached,監(jiān)聽TCP端口11211窄绒,最大內(nèi)存為64M掖疮。調(diào)試信息的內(nèi)容大部分是關(guān)于存儲的信息
$ memcached -p 11211 64m -d   # 后臺服務(wù)程序運行
連接實例
$ telnet HOST PORT
// 實例
$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set foo 0 0 3
bar
STORED
get foo
VALUE foo 0 3
bar
END
quit
set 命令

value 存儲在指定的 key
如果set的key已經(jīng)存在,該命令可以更新該key所對應(yīng)的原來的數(shù)據(jù)颗祝,也就是實現(xiàn)更新的作用

# 語法格式
set key flags exptime bytes [noreply]
value
  • key key-value的key
  • flags 可以包括鍵值對的整型參數(shù)浊闪,客戶機(jī)使用它存儲關(guān)于鍵值對的額外信息
  • exptime 在緩存中保存鍵值對的時間(秒為單位,0 永遠(yuǎn))
  • bytes 存儲字節(jié)數(shù)
  • noreply (可選)告知服務(wù)器不需要返回數(shù)據(jù)
  • value key-value的value

實例:

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

set fmter 0 100 9
memcached
STORED      # 數(shù)據(jù)設(shè)置成功則輸出STORED,保存失敗則輸出ERROR

get fmter
VALUE fmter 0 9
memcached
END
quit
add 命令

value 存儲在指定的 key
如果 add 的 key 已經(jīng)存在螺戳,則不會更新數(shù)據(jù)搁宾,之前的值將仍然保持相同,并且您將獲得響應(yīng) NOT_STORED

# 語法格式 [同set]
add key flags exptime bytes [noreply]
value
replace 命令

替換已存在的 keyvalue倔幼。
如果 key 不存在盖腿,則替換失敗,并且您將獲得響應(yīng) NOT_STORED损同。

# 語法格式 [同set]
replace key flags exptime bytes [noreply]
value
append 命令

向已存在 keyvalue 后面追加數(shù)據(jù)
輸出說明:
STORED 保存成功后輸出翩腐。
NOT_STORED 該鍵在 Memcached 上不存在。
CLIENT_ERROR 執(zhí)行錯誤膏燃。

# 語法格式 [同set]
append key flags exptime bytes [noreply]
value

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

set fmt 0 100 9 
memcached
STORED

get fmt
VALUE fmt 0 9
memcached
END

append fmt 0 100 5
redis
STORED

get fmt
VALUE fmt 0 14
memcachedredis
END
quit
prepend 命令

向已存在 keyvalue 前面追加數(shù)據(jù)
輸出說明:
STORED 保存成功后輸出茂卦。
NOT_STORED 該鍵在 Memcached 上不存在。
CLIENT_ERROR 執(zhí)行錯誤组哩。

# 語法格式 [同set]
prepend key flags exptime bytes [noreply]
value
CAS 命令

CAS(Check-And-Set/Compare-And-Swap) 命令用于執(zhí)行一個"檢查并設(shè)置"的操作
僅在當(dāng)前客戶端最后一次取值后等龙,該key 對應(yīng)的值沒有被其他客戶端修改的情況下, 才能夠?qū)⒅祵懭?br> 檢查是通過cas_token參數(shù)進(jìn)行的伶贰, 這個參數(shù)是memcached指定給已經(jīng)存在的元素的一個唯一的64位值

# 語法格式 [同set]
cas key flags exptime bytes unique_cas_token [noreply]
value
  • unique_cas_token 通過 gets 命令獲取的一個唯一的64位值

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 100 9
memcached
STORED

gets fmt
VALUE fmt 0 9 9
memcached
END

cas fmt 0 100 5 9
redis
STORED

get fmt
VALUE fmt 0 5
redis
END
quit

輸出信息說明
STORED 保存成功后輸出蛛砰。
ERROR 保存出錯或語法錯誤。
EXISTS 在最后一次取值后另外一個用戶也在更新該數(shù)據(jù)黍衙。
NOT_FOUND Memcached 服務(wù)上不存在該鍵值泥畅。

get 命令

獲取存儲在 key 中的 value ,若key不存在,返回空

# 語法格式
get key [key1, key2, ...]
gets 命令

獲取帶有 cas_token存 的 value,若key不存在,返回空

# 語法格式
gets key [key1, key2, ...]
delete 命令

刪除已存在的 key

# 語法格式
delete key [noreply]
delete key [key1, key2, ...]

返回參數(shù)
DELETED 刪除成功
ERROR 語法錯誤/刪除失敗
NOT_FOUND key不存在

incr/decr 命令

對已存在的 key的數(shù)字值進(jìn)行自增或自減操作
操作的數(shù)據(jù)必須是十進(jìn)制的32位無符號整數(shù)

# 語法格式
incr key increment_value
derc key decrement_value

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 100 2
15
STORED

incr fmt 8
23

decr fmt 7
16

返回參數(shù)
NOT_FOUND key不存在
CLIENT_ERROR 自增值不是對象(數(shù)字)
ERROR 其他錯誤,如語法錯誤

stats 命令

輸出 Memcached 服務(wù)信息

# 語法格式
stats

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 9541              # memcached的服務(wù)端進(jìn)程id
STAT uptime 12165      # 服務(wù)器已運行時間(秒)
STAT time 1467873285  # 服務(wù)器當(dāng)前UNIX時間戳
STAT version 1.4.25 Ubuntu   # memcache版本
STAT libevent 2.0.21-stable  
STAT pointer_size 64               # 操作系統(tǒng)指針大小
STAT rusage_user 0.264000    # 進(jìn)程累計用戶時間
STAT rusage_system 0.212000  # 進(jìn)程累計系統(tǒng)時間
STAT curr_connections 5    # 當(dāng)前連接數(shù)量
STAT total_connections 14  # Memcached運行以來連接總數(shù)
STAT connection_structures 6  # Memcached分配的連接結(jié)構(gòu)數(shù)量
STAT reserved_fds 20  
STAT cmd_get 27        # get命令請求次數(shù)
STAT cmd_set 18        # set命令請求次數(shù)
STAT cmd_flush 0       # flush命令請求次數(shù)
STAT cmd_touch 0      # touch命令請求次數(shù)
STAT get_hits 19         # get命令命中次數(shù)
STAT get_misses 8      # get命令未命中次數(shù)
STAT delete_misses 0  # delete命令未命中次數(shù)
STAT delete_hits 1       # delete命令命中次數(shù)
STAT incr_misses 0     # incr命令未命中次數(shù)
STAT incr_hits 1          # incr命令命中次數(shù)
STAT decr_misses 0    # decr命令未命中次數(shù)
STAT decr_hits 1         # decr命令命中次數(shù)
STAT cas_misses 2      # cas命令未命中次數(shù)
STAT cas_hits 1           # cas命令命中次數(shù)
STAT cas_badval 2       # 使用擦拭次數(shù)
STAT touch_hits 0        # touch命令命中次數(shù)
STAT touch_misses 0   # touch命令未命中次數(shù)
STAT auth_cmds 0       # 認(rèn)證命令處理的次數(shù)
STAT auth_errors 0      # 認(rèn)證失敗數(shù)目
STAT bytes_read 934   # 讀取總字節(jié)數(shù)
STAT bytes_written 906  # 發(fā)送總字節(jié)數(shù)
STAT limit_maxbytes 67108864   # 分配的內(nèi)存總大欣欧(字節(jié))
STAT accepting_conns 1   #  服務(wù)器是否達(dá)到過最大連接(0/1)
STAT listen_disabled_num 0  # 失效的監(jiān)聽數(shù)
STAT time_in_listen_disabled_us 0
STAT threads 4              #  當(dāng)前線程數(shù)
STAT conn_yields 0        # 連接操作主動放棄數(shù)目
STAT hash_power_level 16  
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 218          # 當(dāng)前存儲占用的字節(jié)數(shù)
STAT curr_items 3      # 當(dāng)前存儲的數(shù)據(jù)總數(shù)
STAT total_items 12   # 啟動以來存儲的數(shù)據(jù)總數(shù)
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0      # LRU釋放的對象數(shù)目
STAT reclaimed 0    # 已過期的數(shù)據(jù)條目來存儲新數(shù)據(jù)的數(shù)目
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
stats items 命令

顯示各個 slab 中 item 的數(shù)目和存儲時長(最后一次訪問距離現(xiàn)在的秒數(shù))

# 語法格式
stats items

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats items
STAT items:1:number 3
STAT items:1:age 11655
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 0
END
stats slabs 命令

用于顯示各個slab的信息位仁,包括chunk的大小浅妆、數(shù)目、使用情況等

# 語法格式
stats slabs

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 3
STAT 1:free_chunks 10919
STAT 1:free_chunks_end 0
STAT 1:mem_requested 218
STAT 1:get_hits 19
STAT 1:cmd_set 18
STAT 1:delete_hits 1
STAT 1:incr_hits 1
STAT 1:decr_hits 1
STAT 1:cas_hits 1
STAT 1:cas_badval 2
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END
stats sizes 命令

顯示所有item的大小和個數(shù)
該信息返回兩列障癌,第一列是 item 的大小,第二列是 item 的個數(shù)

# 語法格式
stats sizes

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats sizes
STAT 96 3
END
flush_all 命令

清理緩存中的所有 key-value
可選參數(shù) time辩尊,用于在指定的時間后執(zhí)行清理緩存操作

# 語法格式
flush_all [time] [noreply]

實例

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set fmt 0 0 9 
memcached
STORED

get fmt
VALUE fmt 0 9
memcached
END

flush_all
OK

get fmt
END
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涛浙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摄欲,更是在濱河造成了極大的恐慌轿亮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胸墙,死亡現(xiàn)場離奇詭異我注,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)迟隅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門但骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人智袭,你說我怎么就攤上這事奔缠。” “怎么了吼野?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵校哎,是天一觀的道長。 經(jīng)常有香客問我瞳步,道長闷哆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任单起,我火速辦了婚禮抱怔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘀倒。我一直安慰自己野蝇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布括儒。 她就那樣靜靜地躺著绕沈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帮寻。 梳的紋絲不亂的頭發(fā)上乍狐,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音固逗,去河邊找鬼浅蚪。 笑死藕帜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惜傲。 我是一名探鬼主播洽故,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盗誊!你這毒婦竟也來了时甚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哈踱,失蹤者是張志新(化名)和其女友劉穎荒适,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體开镣,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡刀诬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了邪财。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陕壹。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖树埠,靈堂內(nèi)的尸體忽然破棺而出帐要,到底是詐尸還是另有隱情,我是刑警寧澤弥奸,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布榨惠,位于F島的核電站,受9級特大地震影響盛霎,放射性物質(zhì)發(fā)生泄漏赠橙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一愤炸、第九天 我趴在偏房一處隱蔽的房頂上張望期揪。 院中可真熱鬧,春花似錦规个、人聲如沸凤薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缤苫。三九已至,卻和暖如春墅拭,著一層夾襖步出監(jiān)牢的瞬間活玲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留舒憾,地道東北人镀钓。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像镀迂,于是被迫代替她去往敵國和親丁溅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容