首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有Memcached驱动程序的PhpFastCache向缓存条目添加标签需要很长时间

使用带有Memcached驱动程序的PhpFastCache向缓存条目添加标签需要很长时间
EN

Stack Overflow用户
提问于 2020-04-03 19:18:51
回答 2查看 216关注 0票数 4

代码如下:

代码语言:javascript
复制
    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个。这意味着在一个高速缓存条目上最多可以有20个标签。

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

你知道为什么放标签要花这么多时间吗?我将如何改进这一点?

作为信息,当缓存命中时,我有很好的性能。我正在使用Memcached驱动程序,但我尝试使用Redis,使用它时没有这个问题。遗憾的是,我的lead不想使用Redis,而是坚持使用Memcached。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-13 22:12:04

在调查之后,问题是我有太多具有相同'search‘标签的缓存条目(像是成千上万的条目)。

PhpfastCache通过为每个标记创建一个缓存条目来进行标记。然后,当在缓存条目上添加标记时,它首先检索它,然后修改它并将其重新发送到Memcached。所以还有一个内存问题。

无论如何,我确实推荐使用Redis而不是Memcached,因为我在测试过程中遇到的性能问题较少。此外,Redis是一个更完整的缓存解决方案。

票数 0
EN

Stack Overflow用户

发布于 2020-04-05 13:43:37

你的缓存里到底有多少产品?标签应该以"oneToMany“的方式使用,而不是以"manyToOne”的方式使用,这可以解释为什么你会面临性能问题。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61010709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档