Django学习------缓存策略

艾子石
2023-12-01

前言

  • 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显
  • 缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作
    而是直接从内存或者Redis中之前缓存的内容拿到,并返回

Django自带的缓存

1.开发调试缓存

# 开发调试缓存(虽然配置上,但实际没有缓存,还是到数据库取)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎

        #注: 下面这些参数时公用的,五种缓存都可以使用
        'TIMEOUT': 300,           # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS':{
            'MAX_ENTRIES': 300,   # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例(3就是1/3)
        },
    }
}


2.内存缓存

# 注:内存缓存本质上就是在内存中维护一个字典,所存储的形式就是字典的键值对组合

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',     #这个参数指定变量名必须唯一
    }
}


3.文件缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR,'cache'),  #缓存内容存放的文件夹路径
    }
}


4.数据库缓存

使用该缓存需要执行以下命令创建一个数据库表

python manage.py createcachetable
# 注:执行创建表命令 python manage.py createcachetable

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table', # 数据库表名(名字是自己取的)
    }
}

5: Memcache缓存 两种

# 注:Memcache缓存有两个模块:python-memcached模块、 pylibmc模块


CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',          #使用ip加端口连接memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'unix:/tmp/memcached.sock',     #以文件的形式连本地memcached
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [               # memcached天生支持集群
            #1 均衡分配
            '172.19.26.240:11211',
            '172.19.26.242:11211',
            #2 调整权重(权重和请求比例成正比)
            ('172.19.26.240:11211',1),
            ('172.19.26.242:11211',10),
        ]
    }
}


# 注: pylibmc模块只改变上面'BACKEND'配置为下面样式即可
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',



更多有关Django的缓存详细内容,可以参考一下文章
https://blog.csdn.net/qq_34493908/article/details/80825935?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242.1&utm_relevant_index=2

 类似资料: