Skip to content

4.8 缓存架构设计 ​

概述

项目采用两级缓存架构:请求级缓存(内存)+ 持久缓存(file/Redis),大幅减少数据库查询。

两级缓存架构 ​

text
┌─────────────────────────────────────────────────────────┐
│ 第一级:请求级缓存(static 变量)                        │
│                                                         │
│ 生命周期:单次 HTTP 请求                                 │
│ 存储位置:PHP 内存(static $cache)                      │
│ 速度:极快(纳秒级)                                     │
│                                                         │
│ 同一请求内多次查询同一数据,只查一次库或缓存             │
└──────────────────────────┬──────────────────────────────┘
                           │ 未命中
                           ▼
┌─────────────────────────────────────────────────────────┐
│ 第二级:持久缓存(cache() 门面)                         │
│                                                         │
│ 生命周期:跨请求复用                                     │
│ 存储位置:file 或 Redis                                  │
│ 速度:快(毫秒级)                                       │
│ 有效期:1 小时(3600 秒)                                │
│                                                         │
│ 跨请求复用,减少数据库压力                               │
└──────────────────────────┬──────────────────────────────┘
                           │ 未命中
                           ▼
┌─────────────────────────────────────────────────────────┐
│ 数据库查询                                               │
│                                                         │
│ 查询后同时写入两级缓存                                   │
└─────────────────────────────────────────────────────────┘

使用两级缓存的服务 ​

服务缓存键格式说明
DictServicedict_{code}字典项映射
DictServicedict_full_{code}字典项完整数据
ParamServiceparam_{code}系统参数值

缓存驱动配置 ​

.env 配置:

ini
; 文件缓存(默认)
[CACHE]
DRIVER = file

; Redis 缓存(推荐生产环境)
[CACHE]
DRIVER = redis
REDIS_HOST = 127.0.0.1
REDIS_PORT = 6379
REDIS_PASSWORD =
REDIS_DB = 0

生产环境建议使用 Redis

文件缓存在多进程/多服务器环境下无法共享,生产环境建议配置 Redis 缓存驱动。使用 Redis 前需安装 php redis 扩展。

缓存清除 ​

php
// 清除指定字典缓存
DictService::clearCache('gender');

// 清除所有字典缓存
DictService::clearAllCache();

// 清除指定参数缓存
ParamService::clearCache('DEFAULT_PASSWORD');

// 清除所有参数缓存
ParamService::clearAllCache();

对应接口:

text
GET /api/dict/refreshCache    刷新字典缓存

小蚂蚁云团队 · 提供技术支持