讲师中心 微信公众号
AI工具推荐 视频效率加速

ThinkPHP多数据库架构下的缓存配置与管理教程

胖婷同学_9111

胖婷同学_9111

发布时间:2026-09-22 08:34:18

|

936人浏览过

|

来源于php中文网

原创

多数据库架构下必须为每个库绑定独立缓存store,否则Cache::get()因共用default store导致key冲突、数据错读;需配置redis_primary/redis_slave等专属store并显式调用Cache::store('name')->get()。

thinkphp多数据库架构下的缓存配置与管理教程

多数据库架构下直接复用单库缓存配置,会导致缓存 key 冲突、数据错读或静默失效;必须为每个数据库连接显式绑定独立缓存 store,并在查询时主动指定缓存驱动实例,不能依赖全局 Cache facade。

为什么默认 Cache::get() 会读错多库数据

ThinkPHP 的 Cache facade 默认走 default store,而多数据库场景中你可能有 mysql_primarymysql_slave 两个连接,但缓存配置里只定义了一个 redis store —— 所有模型查询都往同一个 Redis 数据库(select => 0)写 key,比如都生成 think:user:1,根本无法区分来源。结果就是从从库查出的数据被主库操作覆盖,或反过来。

  • 缓存 key 没有自动注入数据库连接标识,Cache::set('user_1', $data) 不知道该属于哪个库
  • config/cache.php 中的 stores.redis 是单例,无法按 DB 连接动态切换
  • 即使你手动改前缀(如 'prefix' => 'primary_'),也无法保证所有业务逻辑同步更新

如何为每个数据库连接配专属缓存 store

核心是绕过全局 Cache,用 Cache::store() 拿到指定 store 实例,再结合数据库连接名做语义隔离。不改框架源码,纯配置+调用约定即可落地。

  • config/cache.phpstores 数组里新增两个 Redis store:redis_primaryredis_slave,各自配不同 select 值(如 01)和 prefix(如 'primary:''slave:'
  • 确保两个 store 的 type 都是 'redis',且参数(hostportpassword)一致,仅隔离逻辑库和前缀
  • 不要动 default 配置项,它仍可作为通用缓存(如配置项、菜单)使用,与 DB 缓存解耦
  • 在模型或 service 中,显式调用 Cache::store('redis_primary')->get('user_1'),而非 Cache::get('user_1')

避免手写 store 名导致拼写错误

硬编码 'redis_primary' 容易打错,且不利于后期切换驱动。建议封装一层轻量路由:

PHP
PHP

编写健壮的PHP代码,规避类型转换陷阱、数组怪癖及常见安全漏洞。

下载

立即学习PHP免费学习笔记(深入)”;

// app/common/DbCache.php
<?php
class DbCache
{
    public static function primary()
    {
        return Cache::store('redis_primary');
    }

    public static function slave()
    {
        return Cache::store('redis_slave');
    }
}
  • 调用时写 DbCache::primary()->set('order_123', $data, 3600),语义清晰、IDE 可跳转、重构安全
  • 若某天要把从库缓存换成 file 驱动,只需改 slave() 方法返回 Cache::store('file_slave'),业务层零修改
  • 注意:该类不注册为服务容器对象,避免生命周期干扰;纯静态门面更轻量

缓存失效策略必须匹配读写分离逻辑

主库写后,不能只删 redis_primary 的 key,否则从库查询仍可能命中旧缓存。必须双删,且顺序不能反。

  • 写操作(如更新用户)完成后,先删 DbCache::primary()->delete('user_1'),再删 DbCache::slave()->delete('user_1')
  • 不能用 flush 或通配符删除,会误伤其他 key;必须精准 key 级别操作
  • 如果用了 Cache::remember(),它的回调函数里必须也指定 store,例如 DbCache::slave()->remember('user_1', 3600, function () { ... })
  • Redis 的 select 隔离只是逻辑分库,不是物理隔离;生产环境建议用不同 Redis 实例,select 仅用于开发/测试快速验证

最易被忽略的是缓存键的生成逻辑 —— 如果你在模型里用 $this->name . '_' . $this->id 拼 key,而模型同时被主从库共用,那 key 字符串完全一样,前缀和 store 隔离就白做了。务必确认 key 构造过程已嵌入数据库连接上下文,或统一走 DbCache 封装层收口。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3241

2024.04.10

thinkphp性能怎么样
thinkphp性能怎么样

thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1140

2024.04.10

ThinkPHP6后台管理系统开发与RBAC权限控制实践
ThinkPHP6后台管理系统开发与RBAC权限控制实践

本专题围绕 ThinkPHP6 在后台管理系统开发中的应用展开,重点讲解基于 RBAC 模型的权限控制实现方案。内容涵盖管理员角色设计、菜单权限分配、接口鉴权、中间件拦截机制以及后台模块化开发思路。同时结合实际案例,讲解如何构建完整的后台管理系统,包括用户管理、权限管理与操作日志记录,帮助开发者搭建安全、可扩展的企业级后台系统。

383

2026.03.20

ThinkPHP API接口开发与前后端分离实战
ThinkPHP API接口开发与前后端分离实战

本专题围绕ThinkPHP在前后端分离项目中的 API 开发展开,系统讲解 RESTful 接口设计规范、统一返回结构、参数验证与异常处理机制。内容涵盖 Token 鉴权、跨域处理、接口版本管理以及接口文档生成方案。通过完整项目案例,帮助开发者构建规范、高效、易维护的后端接口服务体系。

284

2026.03.20

ThinkPHP ORM模型关系与数据库操作优化实践
ThinkPHP ORM模型关系与数据库操作优化实践

本专题聚焦ThinkPHP中 ORM 模型的高级用法与数据库操作优化技巧。内容包括一对一、一对多、多对多关系定义与使用、关联预加载、查询构建器优化以及复杂查询封装方法。同时结合实际业务场景,讲解如何避免 N+1 查询问题、提升数据库访问效率,帮助开发者编写高性能的数据访问层代码。

199

2026.03.20

ThinkPHP模型详解
ThinkPHP模型详解

本专题整合了ThinkPHP模型相关内容,阅读专题下面的文章了解更多详细介绍。

218

2026.03.26

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

161

2026.03.30

ThinkPHP日志系统设计与异常监控实践
ThinkPHP日志系统设计与异常监控实践

本专题围绕 ThinkPHP 日志系统展开,深入讲解日志记录机制、日志级别划分、日志文件管理以及自定义日志通道配置。内容涵盖异常捕获、错误追踪、调试信息输出以及日志分析方法。通过实战讲解,帮助开发者提升系统问题定位能力与运维效率。

408

2026.03.30

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn