Я ищу простой способ хранения кеша в Redis
и пометить части кеша tags
поэтому, когда мне было нужно, я мог легко удалить весь кеш, помеченный определенным тегом.
Есть ли хорошее готовое решение для этого? (Я собираюсь использовать доступ Redis с PHP)
Я бы сделал это сам, так как я понимаю, что мне нужно хранить теги как наборы, где значения являются ключами кеша, которые используют тег. Я даже могу охватить ситуацию, когда я удаляю кеш, и его ключ должен быть удален из набора тегов (для этого я могу сохранить список тегов в кэшированном элементе). Но я не уверен, как это сделать, когда срок действия кэша истечет, в этом случае его ключ будет «застревать» в теге, а в следующий раз, когда я удаляю кэш по тегу — он будет очищать кэш ключом, где этот ключ больше не может использоваться. ,
Поэтому я ищу готовое решение, хотя бы посмотреть, как это делается.
Вы можете сделать это с помощью Illuminate \ Cache, которая является частью Laravel, хотя может использоваться сама по себе.
Для его настройки необходимо установить следующие библиотеки композиторов:
Вот пример:
<?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
Я бы сделал это сам, так как я понимаю, что мне нужно хранить теги как наборы, где значения являются ключами кеша, которые используют тег.
Это будет работать, если вы не будете ограничивать доступную память для Redis (и обычно существует жесткое ограничение для доступной памяти для кеша). Потому что, если Redis удалит набор, содержащий ключи, и оставит эти ключи, вы не сможете удалить их по тегу.
Решения: