php - 在 PHP/Redis 上缓存标记有好的解决方案吗?

标签 php caching redis tagging

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

是否有现成的解决方案? (我准备用PHP访问Redis)

我会自己做,据我所知,我需要将标签存储为集合,其中值是使用标签的缓存键。我什至可以涵盖当我删除缓存并且它的键应该从标签集中删除时的情况(为此我可以将标签列表存储在缓存元素中)。但是我不确定缓存过期时该怎么做,在这种情况下,它的 key 将“卡在”标签中,下次我按标签删除缓存时-它将使用 key 清除缓存,而该 key 可能不再使用.

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

最佳答案

你可以使用 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'));

结果将是:

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

关于php - 在 PHP/Redis 上缓存标记有好的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357362/

相关文章:

java - 从 Guava 缓存中移除元素

javascript - javascript 结果前有很多空格

scala - 玩!斯卡拉 2.5 : testing classes injecting cache leads to an error

javascript - 强制浏览器清除 Angular 环境中的缓存

Node.js:通过 cluster.fork() 调用不同的行为

redis - 如何获取 Redis HashMap 中的元素数?

redis - 无法路由消息进行交换 'bulk' : Table empty or key no longer exists

javascript - Laravel 5.0 : Calculation using LaravelCollective and jQuery

php - 拉维尔 6.4 : __toString() must return a string value

PHP 代码嗅探器和驼峰帽