php - 使用 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。
解决方案
您的缓存中究竟有多少产品?标签旨在以“oneToMany”方式使用,而不是“manyToOne”方式,这可以解释为什么您面临性能问题。
此外,如果您使用“基于磁盘”的驱动程序,它的效率将远低于 Redis(和其他)等基于内存的驱动程序,因为 I/O 活动会影响您的应用程序的性能。
推荐阅读
- java - 从文本文件java读取输入
- javascript - 另一个 DIV 中的 DIV 未加载图像
- c++ - dfs迷宫生成,优化?
- sql-server - SQL Server 优化
- gojs - gojs 自定义绑定作为 textBlock 的一部分传递给函数
- laravel - Laravel/Vue - JWT 令牌记住我
- mysql - 在 3 个不同表之间进行 2 次 JOIN 后查找 MAX
- php - 尽可能使用 slug 而不是 ID
- django - 如何在 django-notifications-hq 中隐藏 0 通知计数
- python - 将回归树输出转换为 pandas 表