PHP中的缓存:Redis、Memcached及其他工具
缓存是加速PHP Web应用程序最有效的方法之一。与其每次都执行繁重的数据库查询或计算复杂数据,不如将结果保存在快速存储中。在本文中,我们将介绍PHP中的主要缓存工具:Redis、Memcached、APCu以及简单的文件缓存。您将了解何时选择哪种工具以及如何正确使用它们。
为什么需要缓存?
假设您的网站显示最新新闻列表。如果没有缓存,每个用户都会迫使PHP执行SQL查询、处理数据并生成HTML。如果每分钟有1000人访问网站,数据库将承受巨大压力。缓存允许将结果保存5-10分钟,并即时返回。
PHP中缓存的主要使用场景:
- 繁重SQL查询的结果
- 页面HTML片段
- 外部服务API请求的数据
- 用户会话
- 配置和设置
1. Redis——缓存之王
Redis 是一种基于内存的数据存储,采用键值对方式工作。它支持复杂的数据结构:列表、集合、哈希表。PHP有流行的扩展 phpredis 和更现代的库 Predis。
安装与连接
在服务器上安装Redis,然后通过Composer安装扩展:
composer require predis/predisPHP中使用Redis的示例
<?phprequire 'vendor/autoload.php';
use Predis\\Client;
$client = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);
// 将数据保存10分钟$client->setex('news_list', 600, json_encode($newsData));
// 获取数据$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // 查询数据库并保存到缓存}?>Redis的优点:高速(微秒级)、自动删除过期键(TTL)、支持发布/订阅、事务。缺点——消耗内存。
2. Memcached——简单与速度
Memcached 是另一种基于内存的存储,但比Redis更简单。它只存储字符串,不支持复杂数据结构。然而,对于基本缓存来说,它是理想的选择。
Memcached示例
<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);
$key = 'user_profile_123';$data = $memcached->get($key);
if ($data === false) { // 缓存中没有数据——从数据库获取 $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5分钟}?>Memcached在简单的get/set操作上比Redis更快,但在功能上有所不足。适用于缓存查询结果和会话。
3. APCu——PHP级别的缓存
APCu(Alternative PHP Cache)是一种扩展,它将数据直接存储在PHP进程的内存中。它不需要单独的服务器,但仅在同一台服务器上工作。
APCu示例
<?php// 将值保存10分钟apcu_store('site_config', $config, 600);
// 获取值$config = apcu_fetch('site_config');if ($config === false) { // 从文件加载配置 $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>APCu非常适合缓存配置、模板和很少更改的小型数据。缺点——重启PHP或Web服务器时数据会丢失。