memcached
什么是memcached:
-
memcached
之前是danga
的一個(gè)項(xiàng)目迂曲,最早是為L(zhǎng)iveJournal服務(wù)的肉盹,當(dāng)初設(shè)計(jì)師為了加速LiveJournal訪問(wèn)速度而開(kāi)發(fā)的刊头,后來(lái)被很多大型項(xiàng)目采用眠寿。官網(wǎng)是www.danga.com
或者是memcached.org
莽鸿。 -
Memcached
是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)躬柬,全世界有不少公司采用這個(gè)緩存項(xiàng)目來(lái)構(gòu)建大負(fù)載的網(wǎng)站拜轨,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力。Memcached
是通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表允青,memcached
能存儲(chǔ)各種各樣的數(shù)據(jù)橄碾,包括圖像、視頻颠锉、文件法牲、以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說(shuō)就是將數(shù)據(jù)調(diào)用到內(nèi)存中琼掠,然后從內(nèi)存中讀取拒垃,從而大大提高讀取速度。 - 哪些情況下適合使用
Memcached
:存儲(chǔ)驗(yàn)證碼(圖形驗(yàn)證碼瓷蛙、短信驗(yàn)證碼)悼瓮、登錄session等所有不是至關(guān)重要的數(shù)據(jù)戈毒。
安裝和啟動(dòng)memcached
:
-
windows:
- 安裝:
memcached.exe -d install
。 - 啟動(dòng):
memcached.exe -d start
横堡。
- 安裝:
-
linux(ubuntu):
安裝:
sudo apt install memcached
-
啟動(dòng):
cd /usr/local/memcached/bin ./memcached -d start
-
可能出現(xiàn)的問(wèn)題:
- 提示你沒(méi)有權(quán)限:在打開(kāi)cmd的時(shí)候埋市,右鍵使用管理員身份運(yùn)行。
- 提示缺少
pthreadGC2.dll
文件:將pthreadGC2.dll
文件拷貝到windows/System32
. - 不要放在含有中文的路徑下面翅萤。
-
啟動(dòng)
memcached
:-
-d
:這個(gè)參數(shù)是讓memcached
在后臺(tái)運(yùn)行恐疲。 -
-m
:指定占用多少內(nèi)存。以M
為單位套么,默認(rèn)為64M
。 -
-p
:指定占用的端口碳蛋。默認(rèn)端口是11211
胚泌。 -
-l
:別的機(jī)器可以通過(guò)哪個(gè)ip地址連接到我這臺(tái)服務(wù)器。如果是通過(guò)service memcached start
的方式肃弟,那么只能通過(guò)本機(jī)連接玷室。如果想要讓別的機(jī)器連接,就必須設(shè)置-l 0.0.0.0
笤受。
如果想要使用以上參數(shù)來(lái)指定一些配置信息穷缤,那么不能使用
service memcached start
,而應(yīng)該使用/usr/bin/memcached
的方式來(lái)運(yùn)行箩兽。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start
津肛。 -
telnet
操作memcached
:
telnet ip地址 [11211]
-
添加數(shù)據(jù):
-
set
:- 語(yǔ)法:
set key flas(是否壓縮) timeout value_length value
- 示例:
set username 0 60 7 zhiliao
- 語(yǔ)法:
-
add
:-
語(yǔ)法:
add key flas(0) timeout value_length value
-
示例:
add username 0 60 7 xiaotuo
set
和add
的區(qū)別:add
是只負(fù)責(zé)添加數(shù)據(jù),不會(huì)去修改數(shù)據(jù)汗贫。如果添加的數(shù)據(jù)的key
已經(jīng)存在了身坐,則添加失敗,如果添加的key
不存在落包,則添加成功部蛇。而set
不同,如果memcached
中不存在相同的key
咐蝇,則進(jìn)行添加涯鲁,如果存在,則替換有序。
-
-
-
獲取數(shù)據(jù):
- 語(yǔ)法:
get key
- 示例:
get username
- 語(yǔ)法:
-
刪除數(shù)據(jù):
- 語(yǔ)法:
delete key
- 示例:
delete username
-
flush_all
:刪除memcached
中的所有數(shù)據(jù)抹腿。
- 語(yǔ)法:
-
查看
memcached
的當(dāng)前狀態(tài):- 語(yǔ)法:
stats
。
- 語(yǔ)法:
通過(guò)python
操作memcached
:
安裝:
python-memcached
:pip install python-memcached
笔呀。-
建立連接:
import memcache mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)
-
設(shè)置數(shù)據(jù):
mc.set('username','hello world',time=60*5) mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)
-
獲取數(shù)據(jù):
mc.get('telphone')
-
刪除數(shù)據(jù):
mc.delete('email')
-
自增長(zhǎng):
mc.incr('read_count')
-
自減少:
mc.decr('read_count')
memcached的安全性:
memcached
的操作不需要任何用戶(hù)名和密碼幢踏,只需要知道memcached
服務(wù)器的ip地址和端口號(hào)即可。因此memcached
使用的時(shí)候尤其要注意他的安全性许师。這里提供兩種安全的解決方案房蝉。分別來(lái)進(jìn)行講解:
- 使用
-l
參數(shù)設(shè)置為只有本地可以連接:這種方式僚匆,就只能通過(guò)本機(jī)才能連接,別的機(jī)器都不能訪問(wèn)搭幻,可以達(dá)到最好的安全性咧擂。 - 使用防火墻,關(guān)閉
11211
端口檀蹋,外面也不能訪問(wèn)松申。
ufw enable # 開(kāi)啟防火墻
ufw disable # 關(guān)閉防火墻
ufw default deny # 防火墻以禁止的方式打開(kāi),默認(rèn)是關(guān)閉那些沒(méi)有開(kāi)啟的端口
ufw deny 端口號(hào) # 關(guān)閉某個(gè)端口
ufw allow 端口號(hào) # 開(kāi)啟某個(gè)端口
在Django中使用memcached:
首先需要在settings.py
中配置好緩存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
如果想要使用多臺(tái)機(jī)器俯逾,那么可以在LOCATION
指定多個(gè)連接贸桶,示例代碼如下:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
配置好memcached
的緩存后,以后在代碼中就可以使用以下代碼來(lái)操作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
在存儲(chǔ)數(shù)據(jù)到memcached
中的時(shí)候皇筛,不會(huì)將指定的key
存儲(chǔ)進(jìn)去,而是會(huì)對(duì)key
進(jìn)行一些處理坠七。比如會(huì)加一個(gè)前綴水醋,會(huì)加一個(gè)版本號(hào)。如果想要自己加前綴彪置,那么可以在settings.CACHES
中添加KEY_FUNCTION
參數(shù):
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
}
}
看文章不過(guò)癮拄踪?還有免費(fèi)的視頻教程,讓你學(xué)起來(lái)更輕松:https://www.zhiliaoketang.cn/course/detail/4.html