如何在 PHP 中缓存数据

在开发 PHP 应用程序时,关注性能至关重要。Web 应用程序可能拥有数千甚至数百万用户,这可能会导致性能下降和可用性问题。缓存在这方面是无价的,因为它可以帮助避免性能缺陷。

什么是缓存?

缓存是一种将频繁访问的数据存储在临时存储位置的方法,以减少需要从其原始存储位置检索数据的次数。这可以大大提高网站或应用程序的性能,因为从缓存访问数据通常比从源访问数据快得多。

PHP 提供了几种实现缓存的方法。让我们来看看它们中的每一个。

输出缓冲

输出缓冲是 PHP 中的一项技术,它允许我们将 PHP 脚本的输出存储在缓冲区中,而不是直接将其发送到浏览器。这允许我们在向用户显示之前修改输出或对其执行其他操作。

要启动输出缓冲区,我们可以使用该ob_start()函数。此函数将打开输出缓冲并开始捕获脚本发送的所有输出。然后可以使用该函数将输出存储在变量中ob_get_contents()。最后,可以结束输出缓冲区并使用函数将输出发送到浏览器ob_end_flush(),也可以使用ob_end_clean()函数丢弃输出。

以下是输出缓冲如何工作的示例:

<?php
ob_start(); // Start the output buffer

echo 'This output will be stored in the buffer';

$output = ob_get_contents(); // Get the contents of the output buffer
ob_end_clean(); // End the output buffer and discard the contents

echo 'This output will be sent to the browser';

在此特定示例中,字符串'This output will be sent to the browser'将仅回显一次,因为我们丢弃了包含第一个回显指令的输出缓冲区的内容。

输出缓冲可以用作缓存,因为它允许我们将 PHP 脚本的输出存储在内存中,而不是每次访问脚本时都生成它。

缓存函数

PHP 提供了几个专门用于缓存数据的函数,包括apc_store()memcache_set()xcache_set()。这些函数可用于将数据存储在内存中,访问速度比存储在硬盘驱动器上的数据快得多。

apc_store()

apc_store()函数是替代 PHP 缓存 (APC) 扩展的一部分,它为 PHP 提供操作码缓存。(Opcode缓存是PHP的一种性能优化技术,它将PHP脚本编译后的字节码缓存在内存中,而不是在每次请求时都重新解析和重新编译源代码。)它在APC缓存中存储一​​个指定key的值和过期时间。

apc_store()以下是如何使用该函数在内存中缓存值的示例:

<?php
$value = 'This is the value to cache';

// Store the value in cache for one hour
apc_store('cache_key', $value, 3600);

要检索缓存的值,我们可以使用以下apc_fetch()函数:

<?php
$cachedValue = apc_fetch('cache_key');

if ($cachedValue) {
    // Use the cached value
    echo $cachedValue;
} else {
    // Generate the value and store it in cache
    $value = 'This is the value to cache';
    apc_store('cache_key', $value, 3600);
    echo $value;
}

内存缓存设置()

memcache_set()函数是 Memcache 扩展的一部分,它允许您使用 Memcache 服务器作为 PHP 的缓存。它使用指定的键和过期时间在 Memcache 服务器中存储一个值。

xcache_set()

xcache_set()函数是 XCache 扩展的一部分,它提供了 PHP 操作码缓存和数据缓存。它使用指定的键和过期时间在 XCache 缓存中存储一​​个值。

使用数据库缓存

在 PHP 中缓存的另一种选择是使用数据库来存储缓存数据。这似乎违反直觉,因为缓存的主要目标是减少数据库访问次数并提高性能。但是,在某些情况下,在数据库中缓存数据可能会有用。

一种这样的情况是,如果您需要缓存可能不适合内存的大量数据。此外,如果您需要从多个服务器访问缓存数据,则在数据库中缓存数据会很有用,因为它允许在服务器之间轻松共享缓存数据。

要在数据库中缓存数据,您可以使用至少包含两列的表:一列用于缓存键,一列用于缓存数据。然后,您可以使用SELECT查询来检查表中是否存在缓存键,并使用INSERTorUPDATE查询将数据存储在表中。

以下是如何在 MySQL 数据库中缓存数据的示例:

<?php
$db = new mysqli('localhost', 'username', 'password', 'database');

$cacheKey = 'cache_key';
$cachedValue = 'This is the value to cache';

// Check if the cache key exists in the table
$result = $db->query("SELECT * FROM cache WHERE cache_key = '$cacheKey'");
if ($result->num_rows > 0) {
    // Update the cached value
    $db->query("UPDATE cache SET value = '$cachedValue' WHERE cache_key = '$cacheKey'");
} else {
    // Insert a new cache row
    $db->query("INSERT INTO cache (cache_key, value) VALUES ('$cacheKey', '$cachedValue')");
}

// Retrieve the cached value
$result = $db->query("SELECT * FROM cache WHERE cache_key = '$cacheKey'");
$row = $result->fetch_assoc();
$cachedValue = $row['value'];

echo $cachedValue;

此示例演示如何检查缓存表中是否存在缓存键,如果存在,如何更新缓存值。如果缓存键不存在,则使用缓存键和值将新行插入到表中。然后从表中检索缓存的值并显示给用户。

结论

缓存是一种非常强大的技术,可以提高 PHP 网站或应用程序的性能。PHP 提供了几种实现缓存的选项,包括输出缓冲、缓存函数和使用数据库进行缓存。通过将经常访问的数据存储在一个临时位置,我们可以减少需要从其来源检索数据的次数,并提高站点的整体速度和性能。