什麼是memcached?
Memcached是一個高性能的分佈式的內存對象緩存系統,全世界有很多公司採用這個緩存項目來構建大負載的網站,來分擔數據庫的壓力。Memcached是經過在內存裏維護一個統一的巨大的hash表,memcached能存儲各類各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等,固然由於memcached中的數據是保存在內存中的,應該沒有人會把視頻、圖片等數據保存在memcached中。其實,memcached的原理簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。算法
memcached適用於哪些場景?
存儲驗證碼(圖形驗證碼、短信驗證碼)、登陸session等全部不是相當重要的數據。數據庫
memcached服務的安裝與啓動選項:
安裝:sudo apt install memcached (Linux)django
啓動:service memcached start或者/usr/bin/memcached start緩存
啓動選項:服務器
-u:指定啓動memcached的用戶。
-d:這個參數是讓memcached在後臺運行。
-m:指定運行memcached佔用多少內存,以M爲單位,默認爲64M。
-p:指定佔用的端口,默認端口是11211。
-l:默認爲127.0.0.1,指定別的機器能夠經過哪一個ip地址鏈接到我這臺memcached服務器。若是是經過service memcached start的方式,那麼只能經過本機鏈接。若是想要讓別的機器鏈接,就必須設置 -l 0.0.0.0。
若是想要使用以上參數來指定一些配置信息,那麼不能使用service memcached start,而應該使用/usr/bin/memcached的方式來運行。好比/usr/bin/memcached -u memcache -m 1024 -p 11222 start。session
memcached的基本使用:
鏈接:
咱們通常使用telnet去鏈接memcached服務,而後進行操做,Telnet鏈接memcached:
telnet ip地址 port端口號分佈式
例如:telnet 192.168.42.133 11211memcached
基本操做:
增長或更改數據:
command key flag(是否壓縮) expire length
command類型及具體使用方法:
add:添加數據,此時key若是已經存在於memcached,則會把存不進去,NOT_STORED
replace:只有key已經存在於memcached之中才能使用
set:設置數據,key若是存在,則做用爲replace,若是key不存在,則做用爲add性能
查詢數據:
get key網站
刪除數據:
delete key : 刪除某個特定的數據
flush_all : 刪除memcached中全部的鍵值對
針對數字類型數據的操做:
incr key increase_num:給指定的key增長increase_num
decr key decrease_num:給指定的key減小decrease_num
查看memcached的狀態:
stats:會列出memcached的一些經常使用的數據
查看memcached中全部的鍵:
stats items:查看當前的item_id
stats cachedump item_id num :查看num個鍵的名稱,若是num爲0,則查詢全部
在Django中使用memcached:
首先須要在settings.py中配置好緩存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
若是想要使用多臺機器提供的memcached服務,那麼能夠在LOCATION指定多個鏈接,數據不會實現多臺機器共享,仍是會按照必定的算法單獨保存在其中一臺機器中。示例代碼以下:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
配置好memcached的緩存後,之後在代碼中就可使用如下代碼來操做memcached了:
from django.core.cache import cache
def index(request):
cache.set('abc','zhiliao',60)
print(cache.get('abc'))
response = HttpResponse('index')
return response
須要注意的是,django在存儲數據到memcached中的時候,不會按照咱們提供的key做爲鍵去存儲,而是會對key進行一些處理。好比會加一個前綴,會加一個版本號,因此咱們若是咱們想要手動操做查詢到咱們在django中操做時存入的值,就必須知道存入時的實際的key。若是咱們想要自定義key的處理,那麼能夠在settings.CACHES中添加KEY_FUNCTION參數:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': lambda key,prefix_key,version:"django:%s"%key
}
}