memcached簡單介紹及在django中的使用
什麽是memcached?
Memcached是一個高性能的分布式的內存對象緩存系統,全世界有不少公司采用這個緩存項目來構建大負載的網站,來分擔數據庫的壓力。Memcached是通過在內存裏維護一個統一的巨大的hash表,memcached能存儲各種各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等,當然因為memcached中的數據是保存在內存中的,應該沒有人會把視頻、圖片等數據保存在memcached中。其實,memcached的原理簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。
memcached適用於哪些場景?
存儲驗證碼(圖形驗證碼、短信驗證碼)、登錄session等所有不是至關重要的數據。
memcached服務的安裝與啟動選項:
安裝:sudo apt install memcached (Linux)
啟動: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。
memcached的基本使用:
連接:
我們一般使用telnet去連接memcached服務,然後進行操作,Telnet連接memcached:
telnet ip地址 port端口號
例如:telnet 192.168.42.133 11211
基本操作:
增加或更改數據:
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
}
}
memcached簡單介紹及在django中的使用