PHP中的缓存:Redis、Memcached和APCu——完整指南

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

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

开始课程

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/predis


PHP中使用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服务器时数据会丢失。



4.

推荐