数据库与redis在php中分工协作:mysql负责持久化与复杂查询,redis用作内存缓存提速。典型模式为cache-aside,读先查redis、未命中再查mysql并回填;写先更新mysql再删除redis缓存,确保一致性。

为什么要把数据库和 Redis 一起用
PHP 应用中,MySQL 等关系型数据库负责持久化存储和复杂查询,但频繁读写会拖慢响应速度。Redis 作为内存键值存储,读写极快,适合缓存热点数据、计数器、会话管理等场景。两者不是替代关系,而是分工协作:数据库保底,Redis 提速。
典型缓存模式:Cache-Aside(旁路缓存)
这是最常用也最稳妥的结合方式。业务逻辑主动控制缓存与数据库的一致性,不依赖框架自动同步。
- 读流程:先查 Redis,命中则直接返回;未命中则查 MySQL,再将结果写入 Redis(设置合理过期时间),后续请求即可命中缓存。
- 写流程:先更新 MySQL,成功后再删除对应 Redis 缓存(而不是更新缓存)。下次读时自然重建,避免双写不一致或脏数据。
- 注意点:删除缓存失败需有补偿机制(如记录日志、异步重试),否则可能长期读到旧缓存;缓存 key 命名建议带业务前缀和版本号,例如 "user:profile:v2:123",便于灰度和清理。
用 Redis 做分布式会话和高频状态管理
PHP 默认文件型 session 在多服务器部署下不可用。改用 Redis 存储 session,只需在 php.ini 中配置:
可以实现用户的在线注册、登陆后可以添加图书、购买图书,可以对图书类别、出版社、价格等进行饼图分析默认帐号/密码:51aspx/51aspx该系统采用三层接口开发,App_Code下为三层结构的代码文件,适合三层入门者学习使用数据绑定控件使用的是GridView,顶部公用文件采用了UserControl用户控件调用DB_51aspx下为Sql数据库文件,附件即可【该源码由51aspx提供】
session.save_handler = redis<br>session.save_path = "tcp://127.0.0.1:6379?database=2"
更进一步,可把用户登录态、购物车、秒杀库存、排行榜等高频读写状态交由 Redis 处理:
立即学习“PHP免费学习笔记(深入)”;
- 用 SET user:123:login_token "abc123" EX 3600 存 token,带自动过期;
- 用 HSET cart:123 item_id 5 qty 2 存购物车,结构清晰且支持部分更新;
- 用 ZINCRBY rank:202405 "user:456" 1 实时更新积分榜,天然支持 Top N 查询。
避免踩坑的几个关键细节
Redis 快,但用错反而引入新问题:
- 不要缓存大对象:单个 value 超 10KB 易引发网络和内存压力,建议拆分或只缓存 ID,再按需查库。
- 慎用 KEYS 命令:线上禁用,会阻塞 Redis;用 SCAN 分批遍历替代。
- 连接要复用:PHP-FPM 下推荐使用 predis 或 phpredis 的长连接池(如通过连接字符串加 persistent=1),避免每次请求新建连接。
- 缓存穿透/雪崩要有预案:对不存在的 key 也缓存空值(设较短过期)防穿透;给不同 key 设置随机过期时间,防雪崩。










