一衙荐、安裝
pip install django-redis
背景和意義
服務(wù)器數(shù)據(jù)非經(jīng)常更新荆陆。若每次都從硬盤(pán)讀取一次篮愉,浪費(fèi)服務(wù)器資源腐芍、拖慢響應(yīng)速度。而且數(shù)據(jù)更新頻率較高,服務(wù)器負(fù)擔(dān)比較大夜赵。若保存到數(shù)據(jù)庫(kù)晕粪,還需要額外建立一張對(duì)應(yīng)的表存儲(chǔ)數(shù)據(jù)。在Django中建立表通常做法是建立一個(gè)模型泣刹。看似簡(jiǎn)單犀被,問(wèn)題調(diào)試麻煩椅您、開(kāi)發(fā)時(shí)長(zhǎng)久。為了進(jìn)行服務(wù)器的加速寡键,使用Redis進(jìn)行緩存掀泳。
配置步驟如下
1,服務(wù)器端安裝redis
(1)在Windows安裝redis西轩,方便測(cè)試
Redis不支持Windows员舵!在它官網(wǎng)寫(xiě)得很清楚。但是開(kāi)發(fā)環(huán)境一般是Windows系統(tǒng)藕畔。為了方便開(kāi)發(fā)和調(diào)試马僻,需要在Windows中安裝Redis。微軟自己弄了Redis的Windows版本注服。打開(kāi)https://github.com/MSOpenTech/redis/releases下載msi安裝包韭邓。該版本是64位。安裝msi過(guò)程中溶弟,有個(gè)選項(xiàng)是否加入系統(tǒng)環(huán)境變量女淑,記得勾上。一路下一步可很,安裝诗力。完成之后打開(kāi)cmd,輸入redis-server命令查看是否可以使用我抠。不可以則重啟一下即可苇本。直接輸入redis-server命令使用的配置文件是安裝目錄下的redis.windows.conf文件。
若提示錯(cuò)誤 “ConnectionError: Error 10061 connecting to None:6379”菜拓,可以如下操作瓣窄,打開(kāi)cmd輸入如下命令:
redis-cli????shutdown
再執(zhí)行redis-server即可。
(2)在ubuntu下安裝纳鼎,針對(duì)部署
sudo apt-get????install redis-server
安裝完成后俺夕,Redis服務(wù)器會(huì)自動(dòng)啟動(dòng)裳凸,我們檢查Redis服務(wù)器程序
root@VM-60-191-ubuntu:~# ps -aux|grep redis
redis????30543 ????0.1????0.7????37228????6724?? ? ?????Ssl????14:03????0:00????/usr/bin/redis-? ?????????????????server127.0.0.1:6379
root? ? ? 30660????0.0????0.1????11288? ? ?924? pts/1????S+????14:04????0:00????grep--color=au? ? ? ? ? ? ? ? ? to redis
查看運(yùn)行狀態(tài)
root@VM-60-191-ubuntu:~# sudo /etc/init.d/redis-server status
* redis-server.service - Advanced key-valuestore?
????Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)? Active: active (running) since Mon2018-03-2614:03:03CST;3min1s ago? ?
????????Docs:http://redis.io/documentation,? ? ? ? ?
????????????????man:redis-server(1)
????Main PID:30543(redis-server)?
????????CGroup: /system.slice/redis-server.service? ? ? ? ? `
????????????????????-30543/usr/bin/redis-server127.0.0.1:6379
Mar2614:03:03VM-60-191-ubuntu systemd[1]: Starting Advanced key-valuestore...
Mar2614:03:03VM-60-191-ubuntu run-parts[30533]: run-parts: executing /etc/redis/redis-server....le
Mar2614:03:03VM-60-191-ubuntu run-parts[30544]: run-parts: executing /etc/redis/redis-server....le
Mar2614:03:03VM-60-191-ubuntu systemd[1]: Started Advanced key-valuestore.
Hint: Somelineswere ellipsized, use -ltoshowinfull.
通過(guò)命令行客戶(hù)端訪問(wèn)
root@VM-60-191-ubuntu:~# redis-cli
#查看幫助
127.0.0.1:6379> help? ?
redis-cli3.0.6
Type:"help @<group>" to get a list of commands in
"help <command>" for help on
"help <tab>" to get a list of possible help topics
"quit" to exit
#設(shè)置k-v記錄
127.0.0.1:6379> set key1 "helloword"
OK
#根據(jù)鍵查找記錄
127.0.0.1:6379>get key1 "helloword"
#展示所有的鍵
127.0.0.1:6379>keys *
1)"key1"
#刪除鍵
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379>keys *
(empty list or set)
2,Redis訪問(wèn)控制
默認(rèn)情況下劝贸,訪問(wèn)Redis服務(wù)器是不需要密碼的姨谷,為了讓其他服務(wù)器使用同時(shí)增加安全性我們需要設(shè)置Redis服務(wù)器的訪問(wèn)密碼。設(shè)置訪問(wèn)密碼為yourpassword映九。
由于redis默認(rèn)綁定本機(jī)的梦湘,所以第一步取消該設(shè)置:
sudo vim /etc/redis/redis.conf
用vim打開(kāi)該配置文件,然后注釋掉下面這行:
#bind 127.0.0.1
然后設(shè)置登密碼件甥,用vim打開(kāi)配置文件捌议,配置文件較長(zhǎng),命令模式下輸入/requirepass foobared快速搜索該配置項(xiàng):
#編輯配置文件
sudo vim /etc/redis/redis.conf
#找到下面這一行并去除注釋?zhuān)梢运阉鱮equirepass)我的 是396行
#requirepass foobared 未修改之前
#修改之后
requirepass 123456789? ? #假設(shè) 123456789 是我的redis密碼
修改后重啟服務(wù)器使配置生效:
root@VM-60-191-ubuntu:~# sudo /etc/init.d/redis-server restart
[ ok ]? Restarting redis-server(via systemctl): redis-server.service.
此時(shí)在登錄redis,權(quán)限被控制
root@VM-60-191-ubuntu:~# redis-cli
127.0.0.1:6379>keys *
(error)NOAUTH Authentication required.
用密碼登錄引有,具有權(quán)限
root@VM-60-191-ubuntu:~# redis-cli -a 941020
127.0.0.1:6379>keys *
1)"key2"
通過(guò)以下命令從另一臺(tái)linux服務(wù)器訪問(wèn)redis,password替換為你的密碼瓣颅,host替換為要訪問(wèn)的服務(wù)器
redis-cli? -a? password? -h? host? ip
數(shù)據(jù)庫(kù)的數(shù)量是可以配置的,不知道數(shù)據(jù)庫(kù)就是數(shù)據(jù)庫(kù)0譬正,默認(rèn)情況下是16個(gè)宫补。修改redis.conf下的databases指令:
databases 64
pip? install? django-redis
settings.py中加入以下內(nèi)容,your_host_ip換成你的服務(wù)器地址,yoursecret換成你的服務(wù)器密碼
# 設(shè)置django中CACHE默認(rèn)的保存位置
?CACHES =?{ ???
????????????????"default": { ???????
? ? ? ? ? ? ? ? ? ? ? ? ????"BACKEND": "django_redis.cache.RedisCache", ???????
?????????????????????????????????# 設(shè)置為redis所在, 以及所用庫(kù)序列 ???????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"LOCATION": "redis://127.0.0.1:6379/0", ???????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"OPTIONS": { ???????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"CLIENT_CLASS": "django_redis.client.DefaultClient", ???????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ???
? ? ? ? ? ? ? ? ? ? ? ? ? }, ???
????????????????"session": { # 會(huì)話集 ???????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "BACKEND": "django_redis.cache.RedisCache", ???????????
?????????????????????????????????# 設(shè)置為redis所在, 以及所用庫(kù)序列 ???????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"LOCATI ON": "redis://127.0.0.1:6379/1",? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"OPTIONS": {? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "CLIENT_CLASS": "django_redis.client.DefaultClient", ???????????
?????????????????????????????????} ???????
?????????????????????}
?} ??# 設(shè)置session保存在cache中导帝,就是數(shù)據(jù)庫(kù)存儲(chǔ)改為redis存儲(chǔ)
?SESSION_ENGINE = "django.contrib.sessions.backends.cache"
?# SESSION_CACHE_ALIAS = "default"
?# 設(shè)置保存到1號(hào)庫(kù)守谓,即session庫(kù)
?SESSION_CACHE_ALIAS = "session"?
cache中的是必須的,下面三條可有可無(wú)
4您单,測(cè)試緩存是否成功
本步驟非必須,只是為了測(cè)試看可否正常使用redis荞雏。
進(jìn)入django的后臺(tái)命令模式:
python? manage.py? shell
逐條輸入如下命令測(cè)試:
from????django.core.cache????import cache????#引入緩存模塊
cache.set('v','555',60*60)????#寫(xiě)入key為v虐秦,值為555的緩存,有效期30分鐘
cache.has_key('v')????????#判斷key為v是否存在
cache.get('v')????????#獲取key為v的緩存