django设置redis做为缓存
缓存
-
-
所谓的缓存,实际上往往是把数据库中数据提取出来,并临时存放到一个第三方设备/文件中。
-
一般常见的缓存存储介质:内存(redis/memcached/mysql的内存表),硬盘文件中,CDN(内容分发网络)
-
对于中等流量的网站来说,尽可能地减少开销是必要的。缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源
-
Django自带了一个健壮的缓存系统来保存动态页面,避免对于每次请求都重新计算
-
Django提供了不同级别的缓存粒度:可以缓存特定视图的输出、可以仅仅缓存那些很难生产出来的部分、或者可以缓存整个网站
-
视图缓存
-
模板缓存
-
缓存API
-
设置缓存
-
通过设置决定把数据缓存在哪里,是数据库中、文件系统还是在内存中
-
通过settings文件的CACHES配置来实现
-
参数TIMEOUT:缓存的默认过期时间,以秒为单位,这个参数默认是300秒,即5分钟;设置TIMEOUT为None表示永远不会过期,值设置成0造成缓存立即失效
CACHES={
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT': 60,
}
}
-
可以将cache存到redis中,默认采用1号数据库,此处我们暂时没有学习到redis,但是学习的镜像中已经预装了redis了。
-
需要安装包并配置如下:
安装包:pip install django-redis-cache 或者 pip install django_redis
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache", # django-redis-cache
# "BACKEND": "django_redis.cache.RedisCache", # django_redis
"LOCATION": "redis://:@127.0.0.1:6379/1", # 数据源格式连接写法 mysql://账号:密码@IP:端口/数据库名称?
'TIMEOUT': 60, # 缓存失效时间,这里60秒只是为了测试而已
},
}
-
可以连接redis查看存的数据
# 终端下连接redis,进行redis交互终端:
redis-cli
# 切换数据库:
select 1
# 设置一个数据,保存到指定变量名中 set 变量 值
set name xiaoming
# 查看数据的变量(键/key):
keys *
# 获取指定变量名的数据:
get 键
视图缓存
-
django.views.decorators.cache定义了cache_page装饰器,用于对视图的输出进行缓存
-
示例代码如下:
from django.views.decorators.cache import cache_page
# 函数视图
-
cache_page接受一个参数:timeout,秒为单位,上例中缓存了15分钟
-
视图缓存与URL无关,如果多个URL指向同一视图,每个URL将会分别缓存
缓存API
from django.core.cache import cache
设置:cache.set(键,值,有效时间)
获取:cache.get(键)
删除:cache.delete(键)
清空:cache.clear() # 慎用
视图,代码:
from django.core.cache import cache
class CacheView(View):
def get(self,request):
# 通过缓存api先查询缓存
student_list = cache.get("student_list")
if not student_list:
print("如果没有缓存,则到数据库查询")
student_list = Student.objects.all()
# 查询完成建立缓存 过期时间 为60秒
cache.set("student_list", student_list, 60)
print(student_list)
return HttpResponse("ok")
urls.py,代码:
path("cache", views.CacheView.as_view()),