Django項(xiàng)目如何配置Memcached和Redis緩存?選擇哪個(gè)更有優(yōu)勢(shì)?
對(duì)于中大型網(wǎng)站而言,使用緩存減少對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù)是提升網(wǎng)站性能的關(guān)鍵手段之一。在Django項(xiàng)目生產(chǎn)環(huán)境中最常用的緩存后臺(tái)是Memcached和Redis。今天小編就手把手教你如何在Django項(xiàng)目中配置Memcached和Redis作為緩存后臺(tái)。那么它們兩個(gè)到底哪個(gè)更好呢? 本文會(huì)對(duì)比這兩個(gè)存儲(chǔ)系統(tǒng)并在文末給出答案。
Memcache緩存
Memcache是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),是Django原生支持的最快最有效的緩存系統(tǒng)。Memcached的優(yōu)點(diǎn)是速度快,屬于分布式緩存,支持同時(shí)在多臺(tái)服務(wù)器上運(yùn)行 (Django會(huì)把它們當(dāng)成一個(gè)大緩存)。
第一步:安裝Memcached
windows系統(tǒng):官網(wǎng)下載,解壓安裝即可。
Linux系統(tǒng):Ubuntu系統(tǒng)需要使用sudo apt-get install libevent ibevent-dev安裝Memcached依賴(lài)環(huán)境,再使用sudo apt-get install memcached安裝memcached。
第二步:?jiǎn)?dòng)Memcached
# Linux系統(tǒng)-前臺(tái)啟動(dòng) /usr/local/memcached/bin/memcached -p 11211 -m 64m -vv # Linux系統(tǒng)-作為后臺(tái)服務(wù)啟動(dòng) /usr/local/memcached/bin/memcached -p 11211 -m 64m -d
第三步:pip安裝python-memcached
Python操作memcached數(shù)據(jù)庫(kù)需要安裝python-memcached或pylibmc, 推薦前者。
pip install pyhon-memcached
第四步:將memcached設(shè)為Django緩存后臺(tái)
# 本地緩存,使用localhost
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
# 使用unix soket通信
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
# 分布式緩存,多臺(tái)服務(wù)器,支持配置權(quán)重。
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
# 我們也可以給緩存機(jī)器加權(quán)重,權(quán)重高的承擔(dān)更多的請(qǐng)求,如下:
'LOCATION': [
('172.19.26.240:11211',5),
('172.19.26.242:11211',1),
]
}
}
Redis緩存
Redis 是當(dāng)今速度最快的內(nèi)存型非關(guān)系型(NoSQL)型數(shù)據(jù)庫(kù)。Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等多種數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
第一步:安裝Redis
- windows系統(tǒng):官網(wǎng)下載,解壓安裝即可, 記得勾上加入環(huán)境變量。
- Linux系統(tǒng):Ubuntu系統(tǒng)可使用sudo apt-get install redis-server安裝。
第二步:?jiǎn)?dòng)Redis服務(wù)
# Windows系統(tǒng):cmd進(jìn)入redis安裝目錄,啟動(dòng)redis服務(wù) redis-server.exe redis.windows.conf # Linux系統(tǒng):進(jìn)入redis安裝目錄啟動(dòng)redis服務(wù) redis-server /etc/redis/redis.conf # 打開(kāi)redis交互命令行,用于測(cè)試(可選) redis-cli.exe -h 127.0.0.1 -p 6379 # windows系統(tǒng)下另打開(kāi)一個(gè)窗口 redis-cli # linux系統(tǒng)
注意:默認(rèn)情況下,訪問(wèn)Redis服務(wù)器是不需要密碼的,為了讓其他服務(wù)器使用同增加安全性我們建議設(shè)置Redis服務(wù)器的訪問(wèn)密碼。
由于redis默認(rèn)綁定本機(jī)的,所以第一步取消該設(shè)置:
#編輯配置文件 sudo vim /etc/redis/redis.conf
用vim打開(kāi)該配置文件后,注釋掉下面這行:
# bind 127.0.0.1
然后設(shè)置登錄密碼。由于配置文件較長(zhǎng),命令模式下輸入/requirepass foobared快速搜索該配置項(xiàng):
#找到下面這一行并去除注釋?zhuān)葱薷闹埃? #requirepass foobared #修改成: requirepass your_pwd #設(shè)置新的密碼
修改后使用redis-server restart重啟服務(wù)器使配置生效。以后從其它服務(wù)器訪問(wèn)redis時(shí)攜帶你設(shè)置的密碼即可:
redis-cli -a your_pwd -h hostip
第三步:pip安裝django-redis
Redis安裝好并且啟動(dòng)后,你還需要通過(guò)pip安裝django-redis才能在Django中操作redis數(shù)據(jù)庫(kù)。
pip install django-redis
第四步:將Redis設(shè)為Django緩存后臺(tái)
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://your_host_ip:6379', # redis所在服務(wù)器或容器ip地址
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "your_pwd", # 你設(shè)置的密碼
},
},
}
你還可以在settings.py設(shè)置緩存默認(rèn)過(guò)期時(shí)間(非必須)。
REDIS_TIMEOUT=24*60*60 CUBES_REDIS_TIMEOUT=60*30 NEVER_REDIS_TIMEOUT=365*24*60*60
測(cè)試緩存是否設(shè)置成功
在你修改完settings.py中關(guān)于緩存的配置后,你一定想知道Django緩存是否設(shè)置成功。你可以輸入下面命令打開(kāi)Python的命令交互窗口:
python manage.py shell
然后逐條輸入以下命令進(jìn)行測(cè)試。如果無(wú)任何報(bào)錯(cuò),說(shuō)明你緩存設(shè)置成功。
from django.core.cache import cache #引入緩存模塊
cache.set('k1', '555', 60*1) #寫(xiě)入key為k1,值為555的緩存,有效期1分鐘
cache.has_key('k1')#判斷key為k1是否存在
cache.get('k1') #獲取key為k1的緩存結(jié)果
Memcached vs Redis
Memcached和Redis 兩者都是基于內(nèi)存的、鍵-值數(shù)據(jù)存儲(chǔ)系統(tǒng),速度都很快,而且支持分布式部署,然而兩者的區(qū)別也挺大的。
- 數(shù)據(jù)結(jié)構(gòu):與memcached相比,Redis擁有更多的數(shù)據(jù)結(jié)構(gòu)(如list,set,zset,hash)并且支持豐富的數(shù)據(jù)操作。
- 鍵值尺寸上限:Redis每個(gè)鍵值(value)的存儲(chǔ)尺寸上限高達(dá)512MB,而Memcached每個(gè)鍵值尺寸最大不超過(guò)1MB。
- 數(shù)據(jù)持久化:Memcached不支持?jǐn)?shù)據(jù)持久化,服務(wù)器重啟后緩存數(shù)據(jù)就沒(méi)了,而Redis不僅支持支持緩存數(shù)據(jù)在硬盤(pán)上的持久化,還支持master-slave模式的數(shù)據(jù)備份。
從各方面看,Redis功能特性遠(yuǎn)優(yōu)于Memcached。如果你的企業(yè)要選緩存系統(tǒng),小編建議直接上redis就夠了。
以上就是Django項(xiàng)目如何配置Memcached和Redis緩存?選擇哪個(gè)更有優(yōu)勢(shì)?的詳細(xì)內(nèi)容,更多關(guān)于Django項(xiàng)目配置Memcached和Redis緩存的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
通過(guò)實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法
這篇文章主要介紹了通過(guò)實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
解決python 出現(xiàn)unknown encoding: idna 的問(wèn)題
這篇文章主要介紹了解決python出現(xiàn) unknown encoding: idna 的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python數(shù)據(jù)類(lèi)型詳解(一)字符串
簡(jiǎn)單的說(shuō)字符串String就是使用引號(hào)定義的一組可以包含數(shù)字,字母,符號(hào)(非特殊系統(tǒng)符號(hào))的集合。今天我們就來(lái)詳細(xì)探討下Python數(shù)據(jù)類(lèi)型中的字符串2016-05-05
詳解【python】str與json類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了【python】str與json類(lèi)型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Python中列表和元組的相關(guān)語(yǔ)句和方法講解
這篇文章主要介紹了Python中列表和元組的相關(guān)語(yǔ)句和方法講解,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08
詳談Python3 操作系統(tǒng)與路徑 模塊(os / os.path / pathlib)
下面小編就為大家分享一篇詳談Python3 操作系統(tǒng)與路徑 模塊(os / os.path / pathlib),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python入門(mén)(六)Python數(shù)據(jù)類(lèi)型
這篇文章主要介紹了Python入門(mén)(六)Python數(shù)據(jù)類(lèi)型,Python是一門(mén)非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門(mén)教程,需要的朋友可以參考下2023-04-04

