Memcached實踐基礎

1、Memcached實踐基礎

一、Memcached簡介

自由開源的,高性能,分佈式內存對象緩存系統php

做用:
數據緩存
存儲session
短信驗證碼存儲

安裝
memcached是基於libevent,因此安裝memcached以前須要安裝libeventredis

二、Memcached經常使用命令

set命令
將value(數據值)存儲到指定的key(鍵)中,若是指定的key已經存在,更新key所對應的值
語法:
set key flags expire bytes
參數:
key 鍵值key-value結構中的key,用於查找緩存
flags 能夠包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息
expire 在緩存中保存鍵值對的時間長度 以秒爲單位 0 表示永久
bytes 在緩存中存儲的字節長度
value 存儲的值
輸出信息
stored 表示存儲成功
error 保存信息出錯算法

get命令
獲取存儲在key(鍵)中的value(數據值)
語法
get key1 key2 key3 sql

gets命令
獲取帶有cas令牌存的value(數據值)
若是key不存在,則返回空
語法
gets key1 key2 key3
在使用gets命令的輸出結果中,在最後一列的數字表明當前key的cas令牌數據庫

cas命令
檢查並設置,這個命令僅在當前客戶端最後一次取值後,該key對應的值沒有被其餘客戶端修改的狀況下,才能將值寫入
語法
cas key flags expire bytes unique_cas_token
key 鍵值key-value結構中的key,用於查找緩存值
flags 能夠包括鍵值對的整型參數,客戶機使用它存儲關於鍵值的額外信息
expire 在緩存中保存鍵值對的時間長度 以秒爲單位 0 表示永久
bytes 在緩存中存儲的字節數
unique_cas_token 經過gets命令獲取的惟一的64位值
value 存儲的值緩存

delete命令
刪除已經存在的key(鍵)
delete key
語法:
delete key
參數說明
key 鍵值對key-value結構中的key,用於查找緩存值
輸出值說明
deleted 成功
error 語法錯誤或刪除失敗
not_found key 不存在安全

prepend / append 命令
在前面追加
prepend key flags expire bytes服務器

在後面追加
append key flage expire bytes
參數說明
key 鍵值key-value結構中的key,用於查找緩存值
flags 能夠包括鍵值對的整型參數
expires 在緩存中保存鍵值對的時間長度 單位是秒 0 表示永久有效
bytes 在緩存中的字節長度
value 存儲的值
輸出的信息
stored 成功
not stored 存儲失敗
client error 錯誤cookie

incr / decr 命令
對已存在的key(鍵)的數字值進行自增或自減操做
incr與decr命令操做的數據必須是十進制32位無符號整數
若是key不存在返回not found 若是鍵的值不爲數字,則返回client error 其餘錯誤返回error
語法
incr key increment_value
decr key decrement_value
參數說明
key 鍵值key-value結構中的key,用於查找緩存值
increment_value:增長的數值
decrement_value:減小的數值session

add 命令

將value(數據值)存儲在指定的key(鍵)中
若是add的key已經存在,則不會更新數據,以前的值仍然保持相同,而且將得到not stored
語法
add key flags expire bytes
參數說明
key 鍵值key-value結構中的key 用於查找緩存值
flags 能夠包括鍵值對的整型參數
expire 在緩存中保存鍵值對的時間長度 單位爲秒 0 表示永久
bytes 在緩存中存儲的字節長度

三、Memcached擴展安裝和存儲session

安裝libmemcached=>安裝memcached=>安裝php-memcached擴展
cookie與session

一、http request =》 
二、http reponse+set cookie (sessionId) =》 
三、http request+cookie =>
四、http response

file存儲session的缺點:

一、文件IO讀寫慢
二、分佈式受限制

存儲session方式

  • 修改php.ini
  • 代碼中設置文件
四、Memcached 類的使用

文件緩存 redis緩存 memcahce緩存

  1. 連接服務器
重置服務器地址
$cache->resetServerList();
$cache->addServers(
array(127.0.0.1,11211,60),
array(127.0.0.1,11212,40),
)

第三個參數對應服務器中的權重,來控制服務器被選中的機率

  1. 設置獲取更改數據
$cache->setMulti(
array(
key1=>value1,
key2=>value2,
key3=>value3
),time()+900
);
$cache->get(key1);
$cache->getMulti(key1,key2,...);
//cas數據惟一性 多服務端 併發場景下
$cache->get('k1',null,$cas);
  1. 經常使用方法
搶座買票
$cache->add(key,value,time()+900);
$cache->increment(key,incr);
$cache->decrement(key,decr);

incr與decr命令操做的數據必須是十進制的32位無符號整數,結果不會出現負值

2、Memcached使用場景

  1. Session存儲
  2. 緩解數據庫壓力,提升交互速度
  3. 數據庫主從同步中繼

注意事項

value < 1M key < 512
緩存實踐 < 30 day
Mysql數據同步更新

3、Memcached緩存簡介

優點

  • 內存數據庫是將數據放在內存中直接操做的數據庫
  • 解決數據使用效率的問題,減小IO消耗
  • 分爲關係型內存數據庫和非關係型內存數據庫

特徵

  • 協議簡單,使用簡單的基於文本行的協議
  • 基於libevent事件處理,靈活調整服務器鏈接數
  • 內存存儲,存讀速度快
  • 不互相通訊的分佈式,每一個服務器只對本身的數據進行管理
  • 缺少認證以及安全管制

使用memcached實現分佈式算法

  • 服務器互不通訊
  • 因爲程序實現分佈式
  • 考慮算法分散存儲壓力
  • 考慮算法的命中率

分佈式算法之餘數計算分散法
根據key來計算CRC,而後結果對服務器數進行取模獲得memcached服務器節點,服務器沒法連接的時候,將嘗試的連接次數加到key後面從新計算
缺點:添加或移除服務器時,幾乎全部緩存將重建,還考慮雪崩式崩潰問題

分佈式算法之一致性哈希算法

  • 求出服務器節點的哈希值分配到0-2^32的圓上
  • 求出存儲數據鍵的哈希值映射到圓上
  • 從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上

優勢:冗餘少 負載均衡 過分平滑 存儲均衡

使用memcached實現session共享

session存放在公用的memcached中,實現多服務器共享 缺點:集羣錯誤會致使用戶沒法登錄,回收機制可能致使用戶掉線

相關文章
相關標籤/搜索