django缓存
django 缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views
的返回值保存至内存或memcache
中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者memcache中之前缓存的内容拿到,并返回。
注意:缓存一般用在数据内容不经常更新的地方,如果数据更新频繁,不建议使用缓存。
Django中提供了6种缓存方式:
# 开发调试 # 内存 # 文件 # 数据库 # Memcache缓存(python-memcached模块) # Memcache缓存(pylibmc模块)
现在通常将缓存写入到redis中。
1.内存缓存
说明:该方式是django的默认配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } } # global_settings.py
配置文件中默认的内容;
使用时一般在增加如下配置
CACHES={ 'default':{ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', #这是一个唯一标示,写啥都行 'TIMEOUT': 300,# 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存个数(默认300) 'CULL_FREQUENCY': 3,# 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
2.文件缓存
此缓存将内容保存至文件,比如已经经过模版渲染完之后的html文件内容,如果缓存到文件中,以后就不需要再去进行模版渲染了,直接拿缓存中的要快一些
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', #缓存文件存放路径 } }
3.数据库缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', # 数据库表 } } # 注:执行创建表命令 python manage.py createcachetable,数据库中会自动生成名字为my_cache_table的表作为缓存表
# 注意:如果我们自己手动创建这个缓存表的时候,数据库表的三个字段是必须要有的:看下面的表,并且不需要制定上面的createcachetable指令就可以使用。 from django.db import models # Create your models here. class CacheTalbe(models.Model): cache_key = models.CharField(max_length=2000) value = models.CharField(max_length=2000,null=True) expires = models.DateTimeField(null=True)
- 一般不是用数据库作为缓存,常用的是redis
4.redis缓存
1.安装
pip install django-redis
2.本机安装redis或者服务器已经安装redis
3.配置缓存
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100},# 最大连接数 "PASSWORD":"foobared",# 配置密码,默认在配置文件中查看。 } } }
5.缓存的使用
说明:以上均为django缓存的常用配置,以下为缓存的使用。
import time from django.shortcuts import render from django.views.decorators.cache import cache_page # Create your views here. @cache_page(5)# 设置缓存5秒更新 def index(request): tm=time.time() return render(request,'index.html',{"tm":tm})
返回结果5秒内不在更新。
6.补充:django-redis
说明:django 将数据将数据写入数据时通常使用缓存提供的连接。
from django_redis import get_redis_connection def index_redis(request): conn=get_redis_connection("default") # 传入配置文件中的连接键,因此配置文件中可以配置多个redis连接 conn.set("nickname","啊哈",ex=60) # 设置键值 value=conn.get("nickname").decode("utf8")# 获取值,并将值转化为字符串的形式 print(value) return HttpResponse("...") # views.py
- 继续努力,终成大器!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!