在 #42413 中,主题的缓存失效逻辑进行了重新设计。
然而,Discourse.cache.keys("page_not_found_topics:*").each { |key| Discourse.cache.redis.del(key) } 将遍历所有 Redis 键,导致性能问题,并且在键数量较大时可能会超时。
在这种情况下,如果用户将主题移动到受限类别,可能会遇到 500 错误。
此提交将遍历范围限制为 Discourse.cache.normalize_key("page_not_found_topics:#{locale}"),这比整个 Redis 小得多,并添加了一个测试以避免执行 scan_each。在 #42413 中,主题的缓存失效逻辑进行了重新设计。