Мой скрипт извлекает много файлов JPEG по медленному соединению.Я сохраняю загруженные файлы в локальном кеше и использую их до тех пор, пока они не будут изменены.
Вопрос: Как мне убедиться, что этот кеш никогда не превышает 16 Мб (скажем)?
Я могу очистить его, когда захочу:
- Рассчитать общий размер всех файлов в кэше.
- Удалите некоторые файлы, пока они не станут меньше 16 МБ, минус какмне нужно.
Но что, если два экземпляра сценария сделают это?Обе убедитесь, что 1 МБ свободна, затем используйте 1 МБ каждый, а кэш-память теперь составляет 17 МБ.Правило 16Mb нарушено.
Я знаю, что могу сделать «ленивый кеш» : просто время от времени очищать его.Но злонамеренный пользователь может вызвать много кеширования и исчерпать место на диске.Это общий хостинг, поэтому никто не может сделать.
Единственное решение, которое мне пришло в голову (плохо):
Перед сохранением чего-либо, заблокируйте весь кеш, очиститедо необходимого места, сохранить файл, разблокировать кеш.Почему плохо: я кеширую много файлов, поэтому много блокировки и много очистки.Медленный.(Также как вы блокируете / ждете блокировок в PHP?)