Django缓存(学习系列七)
「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」
前言
很多人都是django是面向sql框架,原因是django的Model大部分面对的是sql。这个原因其实很多,最主要的其实还是因为大部分情况下我们对sql的依赖要更高,一个网站可以没有redis但是没有sql的话那么压根就搞不下去,除非你只是一个极其简陋的信息展示的静态页面,没有数据交互,或者说交互极少。那么在django当中也是可以使用其他数据库的,只是支持相对于sql没有那么好。
原生缓存
这个缓存服务其实在django当中有个内置的cache,他会把缓存存到数据库当中,当然这样做必然没有redis那么快,不过相对而言硬盘可比内存便宜多了。 建表这个得先建表
python manage.py createcachetable my_table_name
配置:
这个打开设置文件
CHACHES={
'default':{
'BACKEND':"django.core.cache.backends.db.DatabaseCache",
'LOCATION':"my_cache_table",
'TIMEOUT':'60',
}
}
当然这里还有其他的配置,前面那几个基本上够用了。当然你还可以加上option
CHACHES={
'default':{
'BACKEND':"django.core.cache.backends.db.DatabaseCache",
'LOCATION':"my_cache_table",
'TIMEOUT':'60',
'OPTIONS':{"MAX_ENIRIES":'300',},
'KEY_PREFIX':'Huterox',
}
}
使用缓存加速 这里有很多方法,最简单的就是直接来个缓存装饰器。
def index(request):
sleep(5)
return HttpResponse("Hello")
@chache_page(60,'Huterox')#过期时间,如果你加了option选项那么再把相应的参数给上
def index(request):
sleep(5)
return HttpResponse("Hello")
那么一个完整的流程如下:
自定义缓存
前面的装饰器一刀切,这样显然不太好,而且后面我们做限制用户访问次数的时候也应该自定义一下。 先来几个方法 set(key,value) get(key) 这玩意就是核心
def index(request):
result=cache.get('index')
if result:
return HttpResponse(result)
else:
#index=....
#此处是index的页面的操作为了简便我就直接让它睡五秒模拟加载的页面很多。
sleep(5)
index="Hello"
cache.set('index',index,timeout=60)
return Httpresponse(index)
使用Redis
由于我们django原生没有redis所以我们要安装第三方django插件
pip install django-redis
pip install django-redis-cache
然后配置 这个配置其实有两种方法 一个是直接配置
CHACHES={
'default':{
'BACKEND':"django_redis.cache.RedisCache",
'LOCATION':"redis://127.0.0.1:6379/1",#数据地址端口和数据库的库(/1第一个库)
"OPTIONS":{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
}
}
}
那么要是这样配置的话,那么还是老方法使用。 还有一种配置是两个一起用。
CHACHES={
'default':{
'BACKEND':"django.core.cache.backends.db.DatabaseCache",
'LOCATION':"my_cache_table",
'TIMEOUT':'60',
}
'redis':{
'BACKEND':"django_redis.cache.RedisCache",
'LOCATION':"redis://127.0.0.1:6379/1",#数据地址端口和数据库的库(/1第一个库)
"OPTIONS":{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
}
}
}
那么在使用的使用我们换一下 如果你想要继续使用原生的那么cache()或者
cache = caches['default']
@cache_page(60,cache='default')
如果用redis的话
cache = caches['redis']
@cache_page(60,cache='redis')
转载自:https://juejin.cn/post/7058501117897867278