- есть chain cache - мол apcu и redis например. И есть скажем данные которые меняются редко но если меняются нужно инвалидировать быстро (относительно). Данные достаточно легковесные - то есть если выбирать "сходить в рэдис или в базу" то можно и в базу сходить. Но поскольку данные привязаны к юзерам и кэш хиты для этого будут ну прям оч высокие страсть как хочется хранить это в памяти (речь идет о неком подобии ACL для ресурса)
Проблема именно в инвалидации. для меня приемлемо отставание данных скажем на секунд 30-60. Но с TTL в 30-60 секунд мне уж проще будет ходить в базу тупо.
У Рэдиса на этот счет есть client-side cache но я так понимаю "с пыхом это не работает". Есть еще дебильный вариант в лоб - при инвалидации кэша "дергать" все инстансы php-fpm и просить их дропнуть кэш но "такое".
p.s. мне спортивного интереса ради
А в чем проблема юзать apcu? Вообще для таких целей мы когда использовали что-то более легковесное чем редис, например Memcached или самописное подобное. Еще помню когда были проблемы с apc при большой нагрузке и большом количестве записи на запрос, то пробовали какуюто такую хрень http://pecl.php.net/package/yac
а зачем в этой схеме тогда редис, если нет разницы сходить в бд или в редис?
С apcu нужно достаточно постаратся, чтобы сделать инвалидацию при нескольких серверах
Это теряет вообще хоть какой-то смысл тогда. Если нужен распределенный кэш - юзайте созданные для этого инструменты, хоть Data Grid по протоколу memcached
просто нужно четко понять, что это кеширование данных или это общие быстрые, оперативные данные. И собственно зачем мы это делаем. Если кеширование, то оно по определению будет устаревать, кеширование нужно для срезания пиков нагрузок на не шардируемые источники данных. Вот это вся инвалидация это костыли, это попытка ускорить доступ к медленному хранилищу, но с классическим кешом скорость будет непредсказуема - в какойто момент запрос пойдет в медленное хранилище, можно конечно это делать заранее, но Если мы хотим делать общие быстрые данные, то сразу надо делать их. Т.е. у нас есть какое-то быстрое хранилище, например в памяти - redis, memcached куча их. Второстепенное хранилище - на диске, например база, используется для аварийного восстановления после сбоев. Ну там сервак перезагрузили и тд.
Не важно рэдис у тебя или постгрес если за данными ты ходишь по сети.
Я рассматриваю редис только как инмемори хранилище и в таком случае разница глобальна.
а для пхп из альтернатив только файлики тогда, если мы не говорим про роад ранеры etc, или может есть что?
а что если редис кластер?
юниккс сокеты или тупо файлы с данными?
не очень понимаю как первое применить, про файлики я и говорил
Разница глобальна когда у тебя что-то интереснее чтения по ключу. Например когда много апдейтов и нужны всякие sorted sets
зачем? просто как бы изначальная постановка задачи непонятная. если мы пики режем - то пофиг чем, apcu вполне. если мы делаем общее быстрое и потом говорим про наносекунды, то это не про пхп
можно придумать какие-то костыли, типа хранить в глбальном редисе мапу юзер_ид => версия при запросе доставать эту версию и юзать как часть ключей для кеша в apcu когда меняются правила для юзера - версия инкрементится в редисе и автоматом инвалидируются кеши во всех apcu, но в замен у тебя дополнительный запрос в редис за версией кастомера
Да какие к черту файлики. В любом случае основная проблема инвалидация в случае нескольких серверов
почему не про пхп?
А как этот кастыль чем-то поможет?
постгрес точно может юникс-сокет слушать, как и мускуль/мария и по сети ходить не надо ) делаем дб кластер и пхп ходит по сокету )
Мы говорим про apcu и инвалидация когда у тебя скажем 5 реплик php fmp
тем что тебе не надо инвалидировать кеши вручную и писать какие-то ивент хендлеры для этого
Ну если речь идет про задержки отдачи например - и надо что-то очень быстро отдавать писать, и в этом контекте рассматриваются хранилище - то это смысла не имеет, т.к. сам пхп дает большие задержки. И проще взять какойнить голенг и будет локальная оперативка общая с внятными кешами процессора. если мы про задержки не говорим - то пофиг че, редис вполне
Но ты не знаешь когда версия меняется
ну не пхп даёт задержки а клиентская кодяра
Сори, я не знаю что на это ответить :)
Обсуждают сегодня