使用Symfony缓存组件在PHP中设置缓存

今天,我将向您展示Symfony缓存组件,这是一种向PHP应用程序添加缓存的简便方法。 通过减少页面加载时间,这有助于提高应用程序的整体性能。

Symfony缓存组件

Symfony缓存组件使您可以在PHP应用程序中设置缓存。 该组件本身非常易于安装和配置,可让您快速入门。 此外,它提供了多种适配器供您选择,如下表所示:

  • 数据库适配器
  • 文件系统适配器
  • 内存缓存适配器
  • Redis适配器
  • APCu适配器
  • 和更多

在使用Symfony缓存组件进行缓存时,您需要熟悉一些术语。

首先, 缓存项是指存储的内容。 每个项目都存储为键值对。 高速缓存项由高速缓存池管理,该高速缓存池对其进行逻辑分组。 实际上,您需要使用缓存池来操作缓存值。 最后,由缓存适配器完成所有繁重的工作以将项目存储在缓存后端中

在本文中,我们将探讨如何释放Symfony Cache组件的功能。 与往常一样,我们将从安装和配置开始,然后在本文的后半部分继续探讨一些实际示例。

安装与配置

在本节中,我们将安装Cache组件。 我假设您已经在系统中安装了Composer,将需要它来安装Packagist上可用的Cache组件。

安装Composer后,请继续并使用以下命令安装Cache组件。

$composer require symfony/cache

那应该已经创建了一个composer.json文件,看起来应该像这样:

{
    "require": {
        "symfony/cache": "^4.1"
    }
}

安装即已完成,但是应该如何将其添加到应用程序中呢? 只需在应用程序中包含由Composer创建的autoload.php文件即可,如以下代码片段所示。

真实的例子

在本节中,我们将通过一个示例演示如何在应用程序中使用Cache组件来缓存内容。

首先,让我们继续创建具有以下内容的index.php文件。

getItem('demo_string');
if (!$demoString->isHit())
{
    $demoString->set('Hello World!');
    $cachePool->save($demoString);
}

if ($cachePool->hasItem('demo_string'))
{
    $demoString = $cachePool->getItem('demo_string');
    echo $demoString->get();
    echo "\n";
}

// delete all items
$cachePool->clear();

if (!$cachePool->hasItem('demo_string'))
{
    echo "The cache entry demo_string was deleted successfully!\n";
}

// 2. store array values
$demoOne = $cachePool->getItem('demo_array');
if (!$demoOne->isHit())
{
    $demoOne->set(array("one", "two", "three"));
    $cachePool->save($demoOne);
}

if ($cachePool->hasItem('demo_array'))
{
    $demoOne = $cachePool->getItem('demo_array');
    var_dump($demoOne->get());
    echo "\n";
}

// delete specific item
$cachePool->deleteItem('demo_array');

if (!$cachePool->hasItem('demo_array'))
{
    echo "The cache entry demo_array was deleted successfully!\n";
}

// 3. set expiry on items
$foo = $cachePool->getItem('foo');
if (!$foo->isHit())
{
    $foo->set('bar');
    $foo->expiresAfter(30);
    $cachePool->save($foo);
}

if ($cachePool->hasItem('foo'))
{
    $foo = $cachePool->getItem('foo');
    echo $foo->get();
    echo "\n";
}
sleep(60);
if ($cachePool->hasItem('foo'))
{
    $foo = $cachePool->getItem('foo');
    echo $foo->get();
    echo "\n";
}
else
{
    echo "Cache item was expired!\n";
}

让我们浏览index.php文件的主要部分以了解它们的用途。

创建缓存池

如前所述,缓存的项目存储在缓存池中。 此外,每个缓存池均由特定的缓存后端和适配器支持。 例如,如果要将项目存储在文件系统缓存中,则需要初始化文件系统适配器的缓存池。

$cachePool = new FilesystemAdapter('', 0, "cache");

您可以为FilesystemAdapter对象提供三个可选参数:

  • 您要在其中创建缓存条目的名称空间
  • 缓存项的生存时间(以秒为单位)
  • 将在其中存储缓存的目录。

如何存储字符串值

由于我们已经创建了缓存池,因此可以使用它来存储缓存项。

首先,我们使用getItem方法通过demo_string键获取缓存项。 接下来,我们使用isHit方法检查要查找的值是否已存在于缓存项$demoString

$demoString = $cachePool->getItem('demo_string');
if (!$demoString->isHit())
{
    $demoString->set('Hello World!');
    $cachePool->save($demoString);
}

由于这是我们第一次获取demo_string缓存项,因此isHit方法应返回false 。 接下来,我们使用$demoString对象的set方法设置缓存值。 最后,我们使用save方法将$demoString缓存项保存到$cachePool缓存池中。

现在,我们已将项目存储在缓存中,让我们看看如何从缓存中获取它。

if ($cachePool->hasItem('demo_string'))
{
    $demoString = $cachePool->getItem('demo_string');
    echo $demoString->get();
    echo "\n";
}

在这里,我们使用hasItem方法在检索缓存池中的缓存项之前对其进行检查。

接下来,让我们看看如何从缓存池中删除所有缓存项:

$cachePool->clear();

如何存储数组值

在上一节中,我们讨论了如何在缓存池中存储基本值。 如下面的示例所示,存储数组值几乎相同。

$demoOne = $cachePool->getItem('demo_array');
if (!$demoOne->isHit())
{
    $demoOne->set(array("one", "two", "three"));
    $cachePool->save($demoOne);
}

if ($cachePool->hasItem('demo_array'))
{
    $demoOne = $cachePool->getItem('demo_array');
    var_dump($demoOne->get());
    echo "\n";
}

如您所见,我们可以简单地将缓存项设置为数组值,就像我们对字符串所做的一样。

接下来,让我们看看如何从缓存池中删除特定的缓存项。

$cachePool->deleteItem('demo_array');

在这里,我们使用deleteItem方法从缓存池中删除demo_array项目。

如何设置缓存项的到期日期

到目前为止,我们已经将项目缓存到池中,没有到期日期。 但是,您通常不希望将项目永久存储在缓存中。 例如,您可能想定期刷新缓存项,因此需要一种机制来清除过期的缓存项。

在本节中,我们将讨论如何在缓存中存储项目以及到期日期。

$foo = $cachePool->getItem('foo');
if (!$foo->isHit())
{
    $foo->set('bar');
    $foo->expiresAfter(30);
    $cachePool->save($foo);
}

如您在上面的代码段中所见,可以使用expiresAfter方法设置缓存项的到期日期。 您可以在expiresAfter方法的第一个参数中传递要缓存项目的expiresAfter

在我们的示例中,我们使用sleep方法测试高速缓存池中高速缓存的项目是否仍然可用。

if ($cachePool->hasItem('foo'))
{
    $foo = $cachePool->getItem('foo');
    echo $foo->get();
    echo "\n";
}
sleep(60);
if ($cachePool->hasItem('foo'))
{
    $foo = $cachePool->getItem('foo');
    echo $foo->get();
    echo "\n";
}
else
{
    echo "Cache item was expired!\n";
}

继续进行测试,看看它如何工作!

结论

今天,我们简要介绍了Symfony缓存组件,该组件使您可以在PHP应用程序中设置缓存。 它还支持各种缓存适配器,这些缓存适配器一起使您可以灵活地选择要使用的后端类型。

请使用以下表格随意表达您的想法和疑问。

翻译自: https://code.tutsplus.com/tutorials/set-up-caching-in-php-with-the-symfony-cache-component--cms-31498

你可能感兴趣的:(java,python,php,linux,缓存)