PHP 缓存:Redis、Memcached 及内置方案:从入门到精通

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么缓存是快速 PHP 应用的基础



每位 PHP 开发者迟早都会遇到性能问题。当数据库开始变慢,页面加载需要 3-5 秒时,首先想到的就是缓存。这不仅仅是“把数据存到某处”,而是一整套优化哲学。



在本文中,我们将全面介绍 PHP 中所有流行的缓存方法:从简单的文件缓存到基于 Redis 和 Memcached 的工业级解决方案。您将学习如何选择合适的工具并避免常见错误。开始吧!



1. PHP 内置缓存机制



1.1. 操作码缓存:OPcache



在讨论外部存储之前,值得记住的是 PHP 本身就能缓存其代码。OPcache 机制将编译后的脚本保存在内存中,使 PHP 无需每次都解析和编译文件。



在 php.ini 中启用 OPcache:



opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2


这是第一道防线。没有 OPcache,任何其他缓存的效果都会大打折扣。



1.2. APCu — 内存中的用户缓存



APCu(Alternative PHP Cache)是一个扩展,用于在 PHP 进程的共享内存中存储任意数据。非常适合不需要分布式缓存的小型项目。



APCu 使用示例:



<?php// 将数据保存 5 分钟apcu_store('my_key', ['data' => 'value'], 300);

// 读取数据$data = apcu_fetch('my_key');if ($data === false) { echo "缓存未找到,重新生成";}

// 删除键apcu_delete('my_key');?>


优点:速度极快,简单易用。缺点:数据仅存在于单个服务器内。



2. Memcached:简单与速度



2.1. 什么是 Memcached 及其用途



Memcached 是一个分布式内存缓存系统。它通过减轻数据库负载来加速动态 Web 应用。与 APCu 不同,Memcached 作为独立服务器运行,可以从不同的 PHP 实例连接。



2.2. 安装和连接 Memcached



首先安装 Memcached 服务器:



sudo apt install memcachedsudo systemctl start memcached


然后安装 PHP 扩展:



sudo pecl install memcached


现在可以操作缓存了:



<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);

// 保存 10 分钟$memcached->set('user_123', ['name' => '伊万', 'email' => 'ivan@example.com'], 600);

// 读取$user = $memcached->get('user_123');if ($user === false) { // 从数据库加载}?>


2.3. 何时选择 Memcached



  • 当需要简单的 key-value 存储时
  • 当数据生命周期较短时(会话、临时数据)
  • 当不需要持久化时(Memcached 不将数据保存到磁盘)


3. Redis:适用于复杂场景的强大工具



3.1. 为什么 Redis 优于 Memcached?



Redis 不仅仅是缓存,它是一个功能完备的内存数据库,支持复杂的数据结构:列表、集合、哈希、位图。与 Memcached 不同,Redis 支持:



  • 持久化 — 重启后数据不会丢失
  • 事务和 Lua 脚本
  • 发布/订阅用于消息交换
  • 复制和集群


3.2. PHP 中使用 Redis 的示例



要使用 Redis,请使

博客

书籍推荐