首页 > 解决方案 > 使用 PhpFastCache 和 Memcached 驱动程序向缓存条目添加标签需要很长时间

问题描述

这是代码:

    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[0] 中的对象总是少于 19 个。这意味着缓存条目上最多可以有 20 个标签。

我需要这些标签能够在需要时使缓存无效。否则,我将不得不大幅减少缓存时间,从 2 小时缩短到几分钟。

知道为什么放置标签需要这么多时间以及如何改进这一点吗?

有关信息,我在命中缓存时具有良好的性能。我正在使用 Memcached 驱动程序,但我尝试使用 Redis,使用它时没有这个问题。遗憾的是,我的领导不想使用 Redis 并坚持使用 Memcached。

标签: phpcachingmemcachedphpfastcache

解决方案


您的缓存中究竟有多少产品?标签旨在以“oneToMany”方式使用,而不是“manyToOne”方式,这可以解释为什么您面临性能问题。

此外,如果您使用“基于磁盘”的驱动程序,它的效率将远低于 Redis(和其他)等基于内存的驱动程序,因为 I/O 活动会影响您的应用程序的性能。


推荐阅读