安裝 Redis
在配置緩存前要先安裝好 Redis 蓖乘,Windows 版本下載地址: https://github.com/MicrosoftArchive/redis/releases ( 官方?jīng)]有對(duì)應(yīng)的 Windows 版本,如果是在Linux環(huán)境质礼,去官網(wǎng)下載即可)市栗,在這里我選擇的是 .msi缀拭,這個(gè)可以通過(guò)界面安裝,只要點(diǎn)幾下就可以安裝完成填帽,就不放安裝過(guò)程圖了蛛淋。
安裝成功后,確定啟動(dòng)了 Redis 服務(wù)篡腌,在 cmd 命令行中輸入 redis-cli 就能進(jìn)入到 Redis 命令行褐荷。(前提要把 Redis 的安裝目錄配置到環(huán)境變量,在安裝過(guò)程有添加環(huán)境變量的選項(xiàng)嘹悼,勾上即可)
安裝 drf-extensions
可以在 Github 中搜索到叛甫,地址:https://github.com/chibisov/drf-extensions,drf-extensions 是 DRF 框架的自定義擴(kuò)展的集合杨伙,其中就包含有緩存的擴(kuò)展其监。
通過(guò) pip 安裝后,像下面的代碼一樣把 CacheResponseMixin 添加到 ViewSet 即可限匣, 注意是添加到第一位 (如果使用的不是 ViewSet 抖苦,可以到文檔中看看具體配置):
from myapps.serializers import UserSerializer
from rest_framework_extensions.cache.mixins import CacheResponseMixin
class UserViewSet(CacheResponseMixin, viewsets.ModelViewSet):
serializer_class = UserSerializer
這時(shí)可以啟動(dòng) Django 項(xiàng)目測(cè)試看看,在訪問(wèn)數(shù)據(jù)前米死,F(xiàn)12 打開(kāi)開(kāi)發(fā)者中心锌历,然后看看響應(yīng)用了多少時(shí)間。
二次的響應(yīng)時(shí)間相差了一倍峦筒,可見(jiàn)緩存起了效果了究西。
另外可以通過(guò)在 settings.py 文件中配置緩存過(guò)期時(shí)間,我這里設(shè)置了10s:
REST_FRAMEWORK_EXTENSIONS = {
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 10
}
基于上面的兩次訪問(wèn)物喷,10s后再來(lái)訪問(wèn)一次看看
響應(yīng)時(shí)間就變慢了卤材,自己可以多測(cè)試幾次看看結(jié)果。
但是脯丝!這里的緩存是存放在 Django 的服務(wù)器上商膊,如果重啟了服務(wù)器那么所有緩存就消失了,這可不行阿宠进,所以要把緩存存放在別的地方晕拆,就是 Redis 上。
安裝 django-redis
地址:https://github.com/niwinz/django-redis,這個(gè)庫(kù)可以把緩存存放到 Redis 中实幕,詳細(xì)說(shuō)明可以看文檔吝镣,有中文文檔。
安裝好后只要一步就能配置成功昆庇,非常方便快捷末贾,在 settings.py 中添加如下:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
我這里 Redis 是沒(méi)有設(shè)置密碼的,如果設(shè)置了把 LOCATION 改為 redis://[:password]@localhost:6379
或者在 OPTIONS 中添加 "PASSWORD": "mypassword"
注意整吆,要確定 Redis 的服務(wù)已經(jīng)啟動(dòng)拱撵,然后再次運(yùn)行 Django 項(xiàng)目,打開(kāi) cmd 命令行表蝙,進(jìn)入到 redis 命令行拴测,輸入 keys *
,如果府蛇,現(xiàn)在是空的集索。
訪問(wèn)一下數(shù)據(jù)再來(lái)看看,有一條數(shù)據(jù)了汇跨,說(shuō)明確實(shí)緩存下來(lái)了务荆。
跟著,我們等個(gè) 10s 穷遂,等緩存過(guò)期后再看看會(huì)怎樣···· 它又空了函匕!緩存過(guò)期了 Redis 也會(huì)把數(shù)據(jù)給刪掉。
緩存到此就配置好了塞颁,更高級(jí)的用法可以到文檔中了解浦箱。