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: 删除旧值之前允许缓存的最大条目。默认是 300

    • CULL_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