From f5e4c1ed5dd287a9bc79cca1598060956ced732e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=BA=A7CV=E5=B7=A5=E7=A8=8B=E5=B8=88?= <2535688890@qq.com> Date: Tue, 3 Feb 2026 10:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=90=AF=E7=94=A8=E4=BA=86Re?= =?UTF-8?q?dis=E7=BC=93=E5=AD=98=EF=BC=8C=E5=88=99=E4=BD=BF=E7=94=A8Redis?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=AB=99=E7=82=B9=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E4=BB=8Esite.php=E8=AF=BB=E5=8F=96=E7=AB=99?= =?UTF-8?q?=E7=82=B9=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=AF=B9git=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=AE=A1=E7=90=86=E6=9B=B4=E5=8A=A0=E5=8F=8B=E5=A5=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/behavior/RedisSiteConfig.php | 75 +++++++++++++++++++ application/common/model/Config.php | 7 ++ application/tags.php | 1 + 3 files changed, 83 insertions(+) create mode 100644 application/common/behavior/RedisSiteConfig.php diff --git a/application/common/behavior/RedisSiteConfig.php b/application/common/behavior/RedisSiteConfig.php new file mode 100644 index 00000000..8f31ddc8 --- /dev/null +++ b/application/common/behavior/RedisSiteConfig.php @@ -0,0 +1,75 @@ + self::all() + ]); + } + } + + public static function isEnableRedis(): bool + { + return strtolower(Config::get('cache.type')) === 'redis'; + } + + public static function getCacheKey(): string + { + // 缓存键名,根据目录结构哈希,确保不同项目配置不冲突 + return 'fastadmin:site_config:' . md5(__DIR__); + } + + /** + * 获取全部 site 配置 + */ + public static function all(): array + { + try { + return Cache::remember(self::getCacheKey(), self::loadFromDb(), 0); + } catch (\Throwable $e) { + // Redis 挂了也不能影响站点 + Log::error('SiteConfig cache error: ' . $e->getMessage()); + return self::loadFromDb(); + } + } + + /** + * 强制刷新缓存 + */ + public static function refresh(): void + { + Cache::rm(self::getCacheKey()); + } + + /** + * 从数据库加载 site 配置 + */ + protected static function loadFromDb(): array + { + $config = []; + $configList = \app\common\model\Config::all(); + foreach ($configList as $k => $v) { + $value = $v->toArray(); + if (in_array($value['type'], ['selects', 'checkbox', 'images', 'files'])) { + $value['value'] = explode(',', $value['value']); + } + if ($value['type'] == 'array') { + $value['value'] = (array)json_decode($value['value'], true); + } + $config[$value['name']] = $value['value']; + } + + return $config; + } + +} diff --git a/application/common/model/Config.php b/application/common/model/Config.php index 64765b25..bba9087a 100644 --- a/application/common/model/Config.php +++ b/application/common/model/Config.php @@ -206,6 +206,13 @@ class Config extends Model if (!\app\admin\library\Auth::instance()->check('general/config/edit')) { return false; } + + if (\app\common\behavior\RedisSiteConfig::isEnableRedis()) { + // 刷新 Redis 缓存 + \app\common\behavior\RedisSiteConfig::refresh(); + return true; + } + $config = []; $configList = self::all(); foreach ($configList as $k => $v) { diff --git a/application/tags.php b/application/tags.php index 40f076fe..3c8add34 100755 --- a/application/tags.php +++ b/application/tags.php @@ -14,6 +14,7 @@ return [ // 应用初始化 'app_init' => [ 'app\\common\\behavior\\Common', + 'app\\common\\behavior\\RedisSiteConfig', ], // 应用开始 'app_begin' => [], -- Gitee