В #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 логика инвалидации кэша для тем была переработана.