代码如下:
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。
发布于 2020-07-13 22:12:04
在调查之后,问题是我有太多具有相同'search‘标签的缓存条目(像是成千上万的条目)。
PhpfastCache通过为每个标记创建一个缓存条目来进行标记。然后,当在缓存条目上添加标记时,它首先检索它,然后修改它并将其重新发送到Memcached。所以还有一个内存问题。
无论如何,我确实推荐使用Redis而不是Memcached,因为我在测试过程中遇到的性能问题较少。此外,Redis是一个更完整的缓存解决方案。
发布于 2020-04-05 13:43:37
你的缓存里到底有多少产品?标签应该以"oneToMany“的方式使用,而不是以"manyToOne”的方式使用,这可以解释为什么你会面临性能问题。
此外,如果你使用的是“基于磁盘的”驱动程序,它的效率将远远低于Redis (和其他驱动程序)等基于内存的驱动程序,因为I/O活动可能会扼杀你的应用程序的性能。
https://stackoverflow.com/questions/61010709
复制相似问题