Django缓存(学习系列七)
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django缓存(学习系列七)相关的知识,希望对你有一定的参考价值。
前言
很多人都是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')
以上是关于Django缓存(学习系列七)的主要内容,如果未能解决你的问题,请参考以下文章
机器学习三人行(系列七)----支持向量机实践指南(附代码)