Добавление тегов в запись кэша занимает много времени с использованием PhpFastCache с драйвером Memcached - PullRequest
4 голосов
/ 03 апреля 2020

Вот код:

    public static function applyInvalidationTags(ExtendedCacheItemInterface $cacheItem, $values): void
    {
        $isSomething = false;
        $tags = [];
        foreach ($values[0] as $value) {
            $tags[] = 'product_id_' . $value->id;

            if (!$isSomething && $value->isSomething) {
                $tags[] = 'isSomething';
                $isSomething = true;
            }
        }

        $cacheItem->addTags($tags);
    }

Когда я удаляю эту строку: '$ cacheItem-> addTags ($ tags);' мой запрос занимает около 1,6 с вместо 2,6 с. В $ values ​​всегда есть менее 19 объектов [0]. Это означает, что в записи кэша может быть не более 20 тегов.

Мне нужны эти теги, чтобы иметь возможность сделать кэш недействительным при необходимости. Без этого мне пришлось бы радикально сократить время кэширования, с 2 часов до минут.

Любая идея, почему размещение тегов занимает так много времени и как я могу улучшить это?

Для информации , У меня хорошая производительность при попадании в кеш. Я использую драйвер Memcached, но я попытался использовать Redis, и у меня нет этой проблемы при его использовании. К сожалению, мое руководство не хочет использовать Redis и настаивает на использовании Memcached.

1 Ответ

0 голосов
/ 05 апреля 2020

Сколько продуктов у вас есть в вашем кеше? Теги предназначены для использования «oneToMany», а не «manyToOne», что может объяснить, почему вы сталкиваетесь с проблемами производительности.

Кроме того, если вы используете драйвер на основе диска, это будет гораздо менее эффективный, чем драйверы на основе памяти, такие как Redis (и другие), из-за активности ввода-вывода, которая может снизить производительность вашего приложения.

...