мы использовали предоставленный Laravel кэш с тегами Redis для кэширования результатов запросов для моделей следующим образом:
cache()->tags([model1, model2...])->remember(sql_query_hash, result_callback)
и если в примере через некоторое время и один из тегов пользователя в пике в примере model1
имеют 500 тыс. Уникальных кэшированных запросов, приходит обновление и необходимо выполнить:
cache()>tags([model1])->flush();
моя работа получает разрешенную память, для рабочих у нас 128 МБ памяти. Да, я знаю, что если бы я увеличил память рабочих, я мог бы сбросить 1кк ключей и т. Д., Но это неправильный путь, потому что у нас увеличивается экспоненциальное число пользователей, и наш проект будет расти, поэтому, возможно, некоторые из тегов будут иметь 10кк ключей на пике пользователей , а как тогда я должен очищать кеш для тега?
https://github.com/laravel/framework/blob/5.7/src/Illuminate/Cache/RedisTaggedCache.php#L174
это то, как laravel сбрасывает теги ключей, извлекая все из памяти, затем снова разбивает ее на части в памяти, чтобы этот array_chunk удваивал использование памяти после получения всех ключей, а затем выполнял операцию Redis :: del для удаления кэшированных ключей для этого тега.
Я не знаю, как это назвать ошибкой, но мне нужны какие-то варианты, кто-нибудь тоже имеет дело с этой проблемой, и, может быть, есть какие-то решения?