缓存系统是网站的一个非常重要的部分,特别是对于中大型网站来讲缓存更是重要。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_setting | JSONField | {} | 用于定义Django缓存配置的JSON对象。 支持多种缓存后端配置:locmem(默认内存缓存)、Redis、Memcached、数据库缓存、文件系统缓存等。 必须为合法的JSON对象格式(如{"key":"value"})。 可为空 (blank=True)。 包含正则验证确保格式正确。 |
| 启用全站缓存 | global_cache_enabled | BooleanField | False | 控制是否启用全站缓存的总开关。 启用后将应用HTTP缓存头与视图缓存。 |
| 视图级缓存配置(单位:秒) | ||||
| 首页缓存时间 | index_timeout | PositiveIntegerField | 0 | 首页的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 频道页缓存时间 | channel_timeout | PositiveIntegerField | 0 | 频道页的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 标签页缓存时间 | tag_timeout | PositiveIntegerField | 0 | 标签页的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 列表页缓存时间 | list_timeout | PositiveIntegerField | 0 | 列表页的缓存时间,单位为秒。 值为0表示不缓存。 (暂未启用) 包含最小值验证 (MinValueValidator(0))。 |
| 内容页缓存时间 | item_timeout | PositiveIntegerField | 0 | 内容详情页的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 模板缓存配置 - 顶部区域(单位:秒) | ||||
| 顶部主区域缓存时间 | top_main_timeout | PositiveIntegerField | 0 | 顶部主区域的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 顶部上区缓存时间 | top_top_timeout | PositiveIntegerField | 0 | 顶部上区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 顶部中区缓存时间 | top_center_timeout | PositiveIntegerField | 顶部中区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 | |
| 顶部下区缓存时间 | top_bottom_timeout | Positive极狐 IntegerField | 0 | 顶部下区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 模板缓存配置 - 主体区域(单位:秒) | ||||
| 主体主区缓存时间 | body_main_timeout | PositiveIntegerField | 0 | 主体主区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体左区整体缓存时间 | body_left_main_timeout | PositiveIntegerField | 0 | 主体左区整体的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体左侧上区缓存时间 | body_left_top_timeout | PositiveIntegerField | 0 | 主体左侧上区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体左侧中区缓存时间 | body_left_center_timeout | PositiveIntegerField | 0 | 主体左侧中区的缓存时间,单位为秒。 <极狐>值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体左侧下区缓存时间 | body_left_bottom_timeout | PositiveIntegerField | 0 | 主体左侧下区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体右侧整体缓存时间 | body_right_main极狐 timeout | PositiveIntegerField | 0 | 主体右侧整体的缓存极狐,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体右侧上区缓存时间 | body_right_top_timeout | PositiveIntegerField | 0 | 主体右侧上区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 主体右侧中区缓存时间 | body_right_center_timeout | PositiveIntegerField | 600 | 主体右侧中区的缓存时间,单位为秒。 默认值为600秒。 包含最小值验证 (MinValueValidator(0))。 |
| 主体右侧下区缓存时间 | body_right_bottom_timeout | PositiveIntegerField | 0 | 主体右侧下区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 模板缓存配置 - 底部区域(单位:秒) | ||||
| 底部主区缓存时间 | foot_main_timeout | PositiveIntegerField | 底部主区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (Min极狐 ValueValidator(0))。 | |
| 底部上区缓存时间 | foot_top_timeout | PositiveIntegerField | 0 | 底部上区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |
| 底部中区缓存时间 | foot_center_timeout | PositiveIntegerField | 86400 | 底部中区的缓存时间,单位为秒。 默认值为86400秒(24小时)。 包含最小值验证 (MinValueValidator(0))。 |
| 底部下区缓存时间 | foot_bottom_time极狐 | PositiveIntegerField | 0 | 底部下区的缓存时间,单位为秒。 值为0表示不缓存。 包含最小值验证 (MinValueValidator(0))。 |