缓存系统是网站的一个非常重要的部分,特别是对于中大型网站来讲缓存更是重要。DjacoreCMS内置了locmem缓存、Redis缓存、Memcached缓存、数据库缓存、文件系统缓存、虚拟缓存(DummyCache)、DjaCore智能三级缓存。

DjacoreCMS深研了数据库索引,所以在数据查询的速度是比较快的,正常情况下默认缓存(locmem缓存)已经可以完全满足你的需求了,再加上我们的优秀的静态处理,只要你的网站不是并发特别高,一般是不需要设置其他缓存的。

缓存为底层操作,保存后系统会自动重启。重启系统后缓存数据是否消失取决于选择的缓存方式!

• 内存缓存(locmem):重启后数据丢失

• Redis/数据库/文件缓存:数据会保留

• Memcached:依赖服务配置

按展示顺序缓存权重:整站缓存>模板缓存>视图缓存>。但模板缓存和视图缓存又是无关的两个缓存,具体细节需要细细体会。

缓存依赖

locmem缓存

配置内容:

{
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",  # 需保持唯一性以区分多进程内存缓存
        "TIMEOUT": 300,  # 默认缓存超时时间(秒)
        "OPTIONS": {
            "MAX_ENTRIES": 1000,  # 最大缓存条目数
            "CULL_FREQUENCY": 3  # 缓存满时删除比例(1/3)
        }
    }
}

使用locmem缓存你不需要任何操作,我们托底的就是采用的这种缓存,这是以内存为缓存介质,当项目重启时缓存销毁,并将陆续重新建立。

内存缓存的优点就是速度快,缺点就是不可以持久化,重启即消。

Redis缓存

Redis缓存需要Redis数据库的支持

{
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",  # 需安装 django-redis 库
        "LOCATION": "redis://:password@127.0.0.1:6379/1",  # 格式:redis://[user:password]@host:port/db
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "SOCKET_CONNECT_TIMEOUT": 5,  # 连接超时时间(秒)
            "SOCKET_TIMEOUT": 5  # 读写超时时间‌
        },
        "KEY_PREFIX": "myapp"  # 全局缓存键前缀
    }
}

Memcached缓存

Memcached缓存需要Memcached数据库的支持

{
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.MemcachedCache",
        "LOCATION": "127.0.0.1:11211",  # 支持多服务器配置(逗号分隔)
        "OPTIONS": {
            "server_max_value_length": 1024 * 1024 * 2  # 单个值最大支持 2MB
        }
    }
}

数据库缓存

数据库缓存以你现在用的数据库为缓存存储介质。需预先执行 python manage.py createcachetable 创建表

 

{
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "my_cache_table",  # 需预先执行 python manage.py createcachetable 创建表
        "TIMEOUT": 600,
        "OPTIONS": {
            "MAX_ENTRIES": 2000
        }
    }
}

 

文件系统缓存

将缓存生成静态文件,会占用一部分IO开销,不使用内容和数据库存储。

{
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "/var/tmp/django_cache",  # 需确保目录存在且有读写权限
        "TIMEOUT": 3600,
        "OPTIONS": {
            "MAX_ENTRIES": 10000
        }
    }
}

虚拟缓存(DummyCache)

纯纯的开发测试用的,没有任何实际用图。只能证明缓存好不好用。不会开发的不要用。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 仅用于开发环境
    }
}

DjaCore智能三级缓存

DjaCoreCMS的独有的一套三级缓存机制以locmem、redis、database为缓存依赖,以smart_cache为技术框架。将快速、灵活、持久集于一身。

高并发项目可以尝试一下。

{"locmem": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",  # 需保持唯一性以区分多进程内存缓存‌
        "TIMEOUT": 300,  # 默认缓存超时时间(秒)
        "OPTIONS": {
            "MAX_ENTRIES": 1000,  # 最大缓存条目数
            "CULL_FREQUENCY": 3  # 缓存满时删除比例(1/3)
        }
    },
    "redis": {
        "BACKEND": "django_redis.cache.RedisCache",  # 需安装 django-redis 库
        "LOCATION": "redis://:password@127.0.0.1:6379/1",  # 格式:redis://[user:password]@host:port/db
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "SOCKET_CONNECT_TIMEOUT": 5,  # 连接超时时间(秒)
            "SOCKET_TIMEOUT": 5,  # 读写超时时间‌
        },
        "KEY_PREFIX": "myapp"  # 全局缓存键前缀
    },
    "database": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "my_cache_table",  # 需预先执行 python manage.py createcachetable 创建表
        "TIMEOUT": 600,
        "OPTIONS": {
            "MAX_ENTRIES": 2000
        }
    },
    # 智能路由缓存(业务实际使用的缓存)
    "smart_cache": {
        "BACKEND": "apps.core.cache.router.SmartCache",
        "OPTIONS":
        {  # 参数需置于OPTIONS字段 
            "LAYERS": ["locmem", "redis", "database"],
            "TIMEOUT": 300,
            "JITTER": (60, 120)
        }
    }
}


核心配置


使用标准JSON格式配置,支持多缓存后端设置。多注意单引号、逗号、注释等,这里很容易报错的地方。

部分缓存系统需要其他程序的配合。

默认为空,我们为您准备了locmem托底,请放心使用。

重要提示:

当你编辑过这里之后如果想清空这里请输入“{}”,以此来保证有json空值进入,否则依旧保存的旧值

缓存配置:

如果需要设置,则按上方的依赖说明进行设置,如果不会,直接{}就可以了。我们会以托底配置运行,性能也是非常不错的。
基础结构

>单项配置:可以在下方选择属于自己的单项进行设置

{
   "default": {
       "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
       "LOCATION": "unique-snowflake",  # 需保持唯一性以区分多进程内存缓存
       "TIMEOUT": 300,  # 默认缓存超时时间(秒)
       "OPTIONS": {
           "MAX_ENTRIES": 1000,  # 最大缓存条目数
           "CULL_FREQUENCY": 3  # 缓存满时删除比例(1/3)
       }
   }
}
>多项配置:可以在下方选择属于自己的多个选项进行设置
{
    "default": {  // 必需配置
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake"
    },
    "redis_cache": {  // 可选额外缓存
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1"
    }
}

全站缓存配置


这里不是启动缓存,无论你启动还是不启动,其他缓存都可以正常运行。这里是指前整站前端所有页面全部进行缓存

这是一种非常霸道的缓存。

我们只负责帮你把程序准备好,具体的参数以上面核心配置-缓存配置json中的配置为准。如果在不设置缓存配置的情况下开启,默认为300秒,如需修改须将默认配置填入缓存配置当中然后修改timeout


启用全站缓存:启用后将应用HTTP缓存头与视图缓存

 

视图缓存策略


视图缓存可以按前端展示页面的类别去区分:比如栏目首页算频道页缓存,文章详情页算内容缓存。

设置思路:变化越快的页面建议缓存的时间越短。

比如栏目页,每页展示20条内容,1分钟发1条文章,20分钟的缓存就可以完成95%——100%的页面更新。

 

模板缓存策略


模板缓存是不同视图缓存的,主要是在模板当中的使用的缓存。

程序查询数据后再用模板渲染,而模板渲染到某个有缓存的部分,就需要考虑这个缓存的时间有没有到期,如果没有到期,模板不接受渲染,按缓存内容继续下去。

设置思路:变化越快的页面建议缓存的时间越短。

比如文章边栏的最近更新文章,列表展示10条内容,1分钟发1条文章,10分钟的缓存就可以完成90%——100%的页面更新。

我们将模板结构大致分为上中下三部分,上下两部分,我们又分为了上中下三部分,主体部分我们分为了左右两部分,每部分又分为了三部分,细节如下,这样就基本满足了模板的需求

上上
上中
上下

中左

中左上
中左中
中左下

中右

中右上
中右中
中右下

下上
下中
下下

 

中文名 (Verbose Name)字段名 (Field Name)字段数据类型 (Field Type)默认值 (Default Value)字段说明 (Help Text/Remarks)
缓存配置caches_settingJSONField{}用于定义Django缓存配置的JSON对象。 
支持多种缓存后端配置:locmem(默认内存缓存)、Redis、Memcached、数据库缓存、文件系统缓存等。 
必须为合法的JSON对象格式(如{"key":"value"})。 
可为空 (blank=True)。 
包含正则验证确保格式正确。
启用全站缓存global_cache_enabledBooleanFieldFalse控制是否启用全站缓存的总开关。 
启用后将应用HTTP缓存头与视图缓存。
视图级缓存配置(单位:秒)
首页缓存时间index_timeoutPositiveIntegerField0首页的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
频道页缓存时间channel_timeoutPositiveIntegerField0频道页的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
标签页缓存时间tag_timeoutPositiveIntegerField0标签页的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
列表页缓存时间list_timeoutPositiveIntegerField0列表页的缓存时间,单位为秒。 
值为0表示不缓存。 
(暂未启用) 
包含最小值验证 (MinValueValidator(0))。
内容页缓存时间item_timeoutPositiveIntegerField0内容详情页的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
模板缓存配置 - 顶部区域(单位:秒)
顶部主区域缓存时间top_main_timeoutPositiveIntegerField0顶部主区域的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
顶部上区缓存时间top_top_timeoutPositiveIntegerField0顶部上区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
顶部中区缓存时间top_center_timeoutPositiveIntegerField顶部中区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
 
顶部下区缓存时间top_bottom_timeoutPositive极狐 IntegerField0顶部下区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
模板缓存配置 - 主体区域(单位:秒)
主体主区缓存时间body_main_timeoutPositiveIntegerField0主体主区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体左区整体缓存时间body_left_main_timeoutPositiveIntegerField0主体左区整体的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体左侧上区缓存时间body_left_top_timeoutPositiveIntegerField0主体左侧上区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体左侧中区缓存时间body_left_center_timeoutPositiveIntegerField0主体左侧中区的缓存时间,单位为秒。 <极狐>值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体左侧下区缓存时间body_left_bottom_timeoutPositiveIntegerField0主体左侧下区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体右侧整体缓存时间body_right_main极狐 timeoutPositiveIntegerField0主体右侧整体的缓存极狐,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体右侧上区缓存时间body_right_top_timeoutPositiveIntegerField0主体右侧上区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
主体右侧中区缓存时间body_right_center_timeoutPositiveIntegerField600主体右侧中区的缓存时间,单位为秒。 
默认值为600秒。 
包含最小值验证 (MinValueValidator(0))。
主体右侧下区缓存时间body_right_bottom_timeoutPositiveIntegerField0主体右侧下区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
模板缓存配置 - 底部区域(单位:秒)
底部主区缓存时间foot_main_timeoutPositiveIntegerField底部主区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (Min极狐 ValueValidator(0))。
 
底部上区缓存时间foot_top_timeoutPositiveIntegerField0底部上区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
底部中区缓存时间foot_center_timeoutPositiveIntegerField86400底部中区的缓存时间,单位为秒。 
默认值为86400秒(24小时)。 
包含最小值验证 (MinValueValidator(0))。
底部下区缓存时间foot_bottom_time极狐PositiveIntegerField0底部下区的缓存时间,单位为秒。 
值为0表示不缓存。 
包含最小值验证 (MinValueValidator(0))。
CacheConfig 缓存设置模型字段说明