在PHP / Redis上是否有很好的缓存标记解决方案?

Smx*_*Cde 5 php tagging caching redis

我正在寻找一种简单的存储缓存的方法,Redis并使用标记标记缓存tags,因此在需要时,我可以轻松删除所有标记有特定标记的缓存。

是否有一个好的即用型解决方案?(我将在PHP中使用访问Redis)

我自己做,因为据我所知,我需要将标签存储为一组,其中值是使用标签的缓存键。我什至可以解决删除缓存时的情况,并且应该从标记的集合中删除其键(为此,我可以将标记列表存储在缓存的元素中)。但是我不确定缓存过期时如何执行此操作,在这种情况下,其密钥会“卡在”标签中,而下次我按标签删除缓存时,它将用密钥清除缓存,而该密钥可能不再使用。

因此,我正在寻找现成的解决方案,至少要看它是如何完成的。

And*_*ell 5

你可以使用 Illuminate\Cache 来做到这一点,它是 Laravel 的一部分,虽然可以单独使用。

为了配置它,您需要安装以下 Composer 库:

  • 预判/预判
  • 照亮/redis
  • 照亮/缓存

下面是一个例子:

<?php
require_once __DIR__ . '/vendor/autoload.php';

$servers = [
    'cluster' => false,
    'default' => [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ],
];

$redis = new Illuminate\Redis\Database($servers);
$cache = new Illuminate\Cache\RedisStore($redis);

$cache->tags('posts', 'author_1')->put('post_1', 'Post 1 by Author 1', 1);
$cache->tags('posts', 'author_2')->put('post_2', 'Post 2 by Author 2', 1);
var_dump($cache->tags('posts', 'author_1')->get('post_1'));
var_dump($cache->tags('posts', 'author_2')->get('post_2'));
$cache->tags('author_2')->flush();
var_dump($cache->tags('posts', 'author_1')->get('post_1'));
var_dump($cache->tags('posts', 'author_2')->get('post_2'));
Run Code Online (Sandbox Code Playgroud)

结果将是:

php test.php 
string(18) "Post 1 by Author 1"
string(18) "Post 2 by Author 2"
string(18) "Post 1 by Author 1"
NULL
Run Code Online (Sandbox Code Playgroud)