天天看點

Flask-論壇開發-5-memcached緩存系統

對Flask感興趣的,可以看下這個視訊教程:http://study.163.com/course/courseLearn.htm?courseId=1004091002

### 介紹:

哪些情況下适合使用 memcached 呢?存儲驗證碼(圖形驗證碼、短信驗證碼),登入 session 等所有不是至關重要且被通路到的幾率較大的資料。

### 安裝(Windows):

使用 cmd 進入到對應目錄,執行 memcached.exe -d install

### 啟用(管理者權限):

使用 cmd 進入到對應目錄,執行 memcached.exe -d start

### 啟動時的參數:

-d 讓 memcached 在背景運作

-m 指定最多能占用多少記憶體,以 M 為機關,預設 64M,超出後會新資料會替換掉最開始的資料

-p 指定占用的端口,預設 11211

-l 指定哪些 ip 可以連接配接,如(-l 0.0.0.0 代表所有機器都能連接配接)預設隻能通過本機連接配接

### 檢視是否啟用:

打開任務管理器,點選 [服務] 選項,若存在 memcached 服務則說明已經啟用

### 可能出現的問題:

1. 提示沒有權限:打開 cmd 的時候使用管理者的身份

2. 缺少 pthreadGC2.dll 檔案:将 pthreadGC2.dll 檔案拷貝到 windows/System32 目錄下

3. 不要放在含有中文字元的路徑下

### telnet 連接配接 memcached 格式:telnet ip port

### 如何驗證 telnet 已經連接配接上 memcached 了?

set username myyd 0 60 3 # 建立一個資料,名字為 myyd ,0 代表是否需要壓縮,存儲 60 秒,其值隻能包含 3 個字元

abc # 輸入 myyd 對應的值

get username # 擷取 username 對應的名字和值

quit # 退出

### memcached 文法(memcached 以鍵值對的方式存儲資料)

登入: telnet [ip] [port]

## set:建立一個新的資料,格式如下:

> set username 0 120 4 # 其中,username 是 key,MYYD 是 value,0 代表不壓縮,120 代表過期時間(s),4 代表值隻能是 4 個位元組

> MYYD

## get:擷取指定資料,如:

> get username

## delete:删除指定資料,如:

> delete username

## flush_all:清除 memcached 中的所有資料

## incr:給 key 的值執行相加操作,格式如下:

> set age 0 120 2

> 18

> incr age 2 # 隻能對數值類型進行相加

> get age # 會得到 20

## decr:給 key 的值執行相減操作,格式如下:

> decr age 2 # 隻能對數值類型進行相加

> get age # 會得到 16

## stats:檢視 memcached 的相關資訊,最常用的是檢視 get 命中率(get 時是從 memcached 中擷取的機率)。但實際上還可以看其他的資訊,如下:

> stats

> STAT get_miss 2 # get miss 次數

> STAT get_hits 2 # get hits 次數

> STAT curr_items 1 # 目前 memcached 中總共有多少鍵值對

> 等等

### 使用 python 操作 memcached:

1. 連接配接 memcached

import memcache

mc = memcache.Client(['127.0.0.1:11211'],debug=True)

2. 設定鍵值對

mc.set('username','MYYD',time=120) # 不需要設定值的長度,time 為過期時間(機關s),預設為 0,0 代表永不過期

3. 設定多個鍵值對

mc.set_multi({'username':'MYYD','age':'18'},time=120) # 設定多個鍵值對時,傳入一個字典

4. 擷取指定資料

username = mc.get('username')

print(username)

5. 删除指定資料

mc.delete('username')

6. 給 key 的值執行相加操作(可以應用在文章的閱讀量上)

mc.incr('age') # 預設在原來的基礎上加 1

mc.incr('age',delta=5) # 若指定了 delta 則可以自定義增長數

7. 給 key 的值執行相減操作

mc.decr('age') # 預設在原來的基礎上減 1

mc.decr('age',delta=5) # 若指定了 delta 則可以自定義遞減數

8. memcached 分布式存儲

所謂 memcached 分布式存儲,就是啟用多台伺服器去存儲 memcached 資料,實作 memcached 分布式存儲的方式如下:

mc = memcache.Client(['127.0.0.1:11211','192.168.110.110:11211'],debug=True) # 在連接配接時候傳入開啟了 memcached 服務的機器的 IP 位址即可

當你 set 資料的時候,會存入不同的伺服器中,達到分布式存儲的功能。