django缓存

博客 分享
0 202
优雅殿下
优雅殿下 2022-03-07 10:56:14
悬赏:0 积分 收藏

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

image-20220306103312046

2.本机安装redis或者服务器已经安装redis

image-20220306103838267

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 timefrom django.shortcuts import renderfrom 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秒内不在更新。

image-20220306102546144

6.补充:django-redis

说明:django 将数据将数据写入数据时通常使用缓存提供的连接。

from django_redis import get_redis_connectiondef 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

image-20220307103850612

image-20220307103904023

image-20220307104018140

  • 继续努力,终成大器!!!
posted @ 2022-03-07 10:45 紫青宝剑 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员