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缓存(学习系列七)的主要内容,如果未能解决你的问题,请参考以下文章

机器学习三人行(系列七)----支持向量机实践指南(附代码)

django之第二天

django-缓存的三种应用

自动化运维Python系列之Django信号缓存操作

Python学习----第七模块笔记(Web开发进阶之Django数据库操作)

DJANGO入门系列之(模板层)