django cache 缓存
1.缓存可以解决代码大量的重复请求,减少访问者对数据库的压力
官网:https://docs.djangoproject.com/zh-hans/2.2/topics/cache/
2缓存的工作原理:
given a URL, try finding that page in the cache
if the page is in the cache:
return the cached page
else:
generate the page
save the generated page in the cache (for next time)
return the generated page
3.缓存位置支持以下几种:
Memcached,数据库缓存,文件系统缓存,本地内存缓存,虚拟缓存(用于开发模式),使用自定义的缓存后台
其中Memchahed速度是最快的,应为是基于内存的
4.缓存的方式有以下几种:
1.视图缓存
from django.views.decorators.cache import cache_page
#在函数前面加装饰器
@cache_page(60 * 15)
def my_view(request):
...
2.模板片段缓存
{% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
直接缓存的代码加上以上代码
3.低级缓存API
只缓存部分信息
5.cache基本用法:
# 添加缓存
cache.set(key,value,timeout,DEFAULT_TIMEOUT, version=None)
# 获取缓存
cache.get(key, default=None, version=None)
# 键不存在时添加它
cache.get_or_set(key, default, timeout=DEFAULT_TIMEOUT, version=None)
# 只能访问缓存一次
cache.get_many(keys, version=None)
# 要更有效地设置多个值,字典类型
cache.set_many(dict, timeout)
# 删除键
cache.delete(key, version=None)
# 批量删除,list类型
cache.delete_many(keys, version=None)
# 删除所有
cache.clear()
# 为键设置新的到期时间
cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)
# incr()或decr()方法递增或递减已存在的键
cache.incr(key, delta=1, version=None)
cache.decr(key, delta=1, version=None)
# close()关闭与缓存的连接
cache.close()
# 缓存配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://localhost:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
from django.shortcuts import render, HttpResponse
from django.core.cache import cache
# Create your views here.
def home(request):
data = '我是要缓存的数据'
# 判断是否已缓存
cache_data = cache.get('key', None)
if cache_data is None:
# 设置缓存
cache.set('key', data, 60)
return HttpResponse('开始缓存')
else:
return HttpResponse('我已经缓存了:' + cache_data)
8.这就是一个小的demo,希望大家通过小demo去往深入的研究