Django集成Redis实现页面数据缓存与自动失效策略

阿麦
阿麦
发布时间:2026-10-13| 6人浏览过
原创

本文详解如何在Django中集成Redis作为缓存后端,通过配置settings.py启用内存级高速读写。重点讲解利用django.core.cache API进行数据存取,并针对缓存时效性问题,提出在Admin模型保存或删除时自动清除相关缓存Key的方案,确保页面数据与数据库状态实时同步。

Django集成Redis实现页面数据缓存与自动失效策略

为何需要引入缓存机制

动态网站的核心矛盾在于其“动态”属性。每次用户发起页面请求,服务器均需重新执行计算逻辑。相较于直接读取静态文件,这种实时计算带来的服务器资源消耗显著更高。

引入缓存机制的核心目的是将多用户访问时相对稳定的数据预先存储。当用户再次请求页面时,系统可直接从缓存中读取数据,从而避免重复的计算开销,显著提升响应性能。

选择Redis作为缓存存储方案

选择Redis作为缓存存储方案

采用Redis数据库存储缓存数据,主要基于其Key-Value结构的NoSQL特性及内存数据库的优势。Redis将数据加载至内存进行操作,并异步将数据备份至硬盘。由于内存读取速度远超硬盘,Redis的读写性能比其他文件型数据库高出许多。

Django缓存配置指南

Django缓存配置指南

需在项目的settings.py文件中添加以下配置:


CACHES = {
  "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://172.16.3.241:6379/9", //指向装有redis的服务器IP地址:端口 /9表示使用db9
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
  }
}

调用Django内置的缓存API(cache)

调用Django内置的缓存API(cache)

首先导入模块:from django.core.cache import cache

具体应用示例

具体应用示例

在视图类或视图函数中,不应立即执行数据计算。首先尝试从缓存中读取页面数据;若返回None,表明无缓存或缓存已过期,此时才执行数据库查询等耗时操作。

获取更新后的数据后,将其写入缓存。整个过程中,同一页面始终使用统一的Key进行数据的存取或删除操作。


# 缓存的设置与获取
伪代码:

content= cache.get(‘index_data')

if content is None:

  查询数据等

  cache.set(‘index_data',content,timeout) # 设置缓存

# 渲染页面

缓存设置包含过期时间(timeout),单位为秒。一旦超过该时间,系统将不再使用该缓存数据,以此防止缓存内容长期不变。

缓存时效性与数据同步策略

然而,若设定timeout为3600秒(即60分钟),在此期间若网页底层数据发生更新,用户访问时仍只能看到旧的缓存数据。为保证缓存数据的时效性,

需要在数据发生更改时主动删除对应的旧缓存。

以Django自带的管理后台为例,当模型数据发生修改时,系统默认会调用admin.ModelAdmin的save_model或delete_model方法。因此,可以通过继承并重写这些方法,在其中添加

删除缓存的代码,使得网站管理员通过管理后台修改数据时,相关的页面缓存能够被自动清除。

具体实现代码如下:


class BaseModel(admin.ModelAdmin):
  '''
  继承admin.ModelAdmin
  重写save_model / delete_model 方法
  '''

  def save_model(self, request, obj, form, change):

    super().save_model(request,obj,form,change)
    
    # 删除首页缓存
    cache.delete('index_data')
    # 删除类型和新品推荐的缓存
    cache.delete('types_and_newsku')

  def delete_model(self, request, obj):

    super().delete_model(request,obj)
  
    #删除首页缓存
    cache.delete('index_data')
    # 删除类型和新品推荐的缓存
    cache.delete('types_and_newsku')

以上内容为本文的全部讲解,希望能为读者的学习提供参考,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。