4、Django缓存
Django-Redis
安装
pip install django-redis Django
支持 Redis cache/session 后端的全功能组件。充当cache/session Django-Redis依赖于pyredis
作为session后端
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"作为cache后端
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}应用
单独视图缓存
(记得取消全站缓存中间件配置)
当用户首次访问博客首页时,我们从数据库中提取文章列表,并将其存储到缓存里(常用的是内存,这取决于你的设置)。当用户在单位时间内再次访问首页时, Django先检查缓存是否过期(本例是15分钟), 再检查缓存里文章列表资源是否存在,如果存在,直接从缓存中读取数据, 并渲染模板。
模板局部缓存:
在路由URLConf中使用cache
前一节中的范例将视图硬编码为使用缓存,因为 cache_page 在适当的位置对 my_view 函数进行了转换。 该方法将视图与缓存系统进行了耦合,从几个方面来说并不理想。 例如,你可能想在某个无缓存的站点中重用该视图函数,或者你可能想将该视图发布给那些不想通过缓存使用它们的人。 解决这些问题的方法是在 URLconf 中指定视图缓存,而不是紧挨着这些视图函数本身来指定。 完成这项工作非常简单: 在 URLconf 中用到这些视图函数的时候简单地包裹一个 cache_page 。以下是刚才用到过的 URLconf : 这是之前的URLconf:
其他缓存方式
缓存参数:
TIMEOUT: 缓存的默认超时时间,以秒为单位,默认300秒 || None(永不过期)|| 0 (立即过期)
OPTIONS
MAX_ENTRIES: 删除旧值之前允许缓存的最大条目。默认是
300CULL_FREQUENCY: 当达到
MAX_ENTRIES时,被删除的条目的比例。实际比例是1 / CULL_FREQUENCY,所以将CULL_FREQUENCY设置为2,即当达到MAX_ENTRIES时将删除一半的条目。这个参数应该是一个整数,默认为3。值为0意味着当达到MAX_ENTRIES时,整个缓存将被转储。在某些后端(特别是database),这使得缓存速度 更 快,但代价是缓存未命中更多。
KEY_PREFIX: 一个自动包含在 Django 服务器使用的所有缓存键中的字符串(默认为前缀)
VERSION :Django 服务器生成的缓存键的默认版本号
KEY_FUNCTION : 一个字符串,包含一个函数的点分隔路径,该函数定义了如何将前缀、版本和键组成一个最终的缓存键。
Memcached 缓存实战
缺点: 基于内存的缓存有一个缺点:因为缓存的数据存储在内存中,如果你的服务器崩溃,数据将丢失
REDIS 缓存实战
文件系统缓存实战
本地内存缓存实战
Last updated