Files
easygoadmin-wiki/EasyGoAdmin_Gin_EleVue/zh/architecture/cache.md
T
2026-10-20 21:19:44 +08:00

3.7 KiB
Raw Blame History

4.8 缓存架构设计

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

两级缓存架构

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

使用两级缓存的服务

服务 缓存键格式 说明
DictService dict_{code} 字典项映射
DictService dict_full_{code} 字典项完整数据
ParamService param_{code} 系统参数值

缓存驱动配置

.env 配置:

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

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

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

缓存清除

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

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

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

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

对应接口:

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