Django缓存(学习系列七)

3,204 阅读2分钟

「这是我参与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')