169 похожих чатов

Вопросик. Кто как делает кэширование? В целом у меня проблема какая

- есть chain cache - мол apcu и redis например. И есть скажем данные которые меняются редко но если меняются нужно инвалидировать быстро (относительно). Данные достаточно легковесные - то есть если выбирать "сходить в рэдис или в базу" то можно и в базу сходить. Но поскольку данные привязаны к юзерам и кэш хиты для этого будут ну прям оч высокие страсть как хочется хранить это в памяти (речь идет о неком подобии ACL для ресурса)

Проблема именно в инвалидации. для меня приемлемо отставание данных скажем на секунд 30-60. Но с TTL в 30-60 секунд мне уж проще будет ходить в базу тупо.

У Рэдиса на этот счет есть client-side cache но я так понимаю "с пыхом это не работает". Есть еще дебильный вариант в лоб - при инвалидации кэша "дергать" все инстансы php-fpm и просить их дропнуть кэш но "такое".

p.s. мне спортивного интереса ради

24 ответов

23 просмотра

А в чем проблема юзать apcu? Вообще для таких целей мы когда использовали что-то более легковесное чем редис, например Memcached или самописное подобное. Еще помню когда были проблемы с apc при большой нагрузке и большом количестве записи на запрос, то пробовали какуюто такую хрень http://pecl.php.net/package/yac

а зачем в этой схеме тогда редис, если нет разницы сходить в бд или в редис?

С apcu нужно достаточно постаратся, чтобы сделать инвалидацию при нескольких серверах

Это теряет вообще хоть какой-то смысл тогда. Если нужен распределенный кэш - юзайте созданные для этого инструменты, хоть Data Grid по протоколу memcached

просто нужно четко понять, что это кеширование данных или это общие быстрые, оперативные данные. И собственно зачем мы это делаем. Если кеширование, то оно по определению будет устаревать, кеширование нужно для срезания пиков нагрузок на не шардируемые источники данных. Вот это вся инвалидация это костыли, это попытка ускорить доступ к медленному хранилищу, но с классическим кешом скорость будет непредсказуема - в какойто момент запрос пойдет в медленное хранилище, можно конечно это делать заранее, но Если мы хотим делать общие быстрые данные, то сразу надо делать их. Т.е. у нас есть какое-то быстрое хранилище, например в памяти - redis, memcached куча их. Второстепенное хранилище - на диске, например база, используется для аварийного восстановления после сбоев. Ну там сервак перезагрузили и тд.

Sergey-P Автор вопроса

Не важно рэдис у тебя или постгрес если за данными ты ходишь по сети.

Я рассматриваю редис только как инмемори хранилище и в таком случае разница глобальна.

а для пхп из альтернатив только файлики тогда, если мы не говорим про роад ранеры etc, или может есть что?

а что если редис кластер?

юниккс сокеты или тупо файлы с данными?

не очень понимаю как первое применить, про файлики я и говорил

Sergey-P Автор вопроса

Разница глобальна когда у тебя что-то интереснее чтения по ключу. Например когда много апдейтов и нужны всякие sorted sets

зачем? просто как бы изначальная постановка задачи непонятная. если мы пики режем - то пофиг чем, apcu вполне. если мы делаем общее быстрое и потом говорим про наносекунды, то это не про пхп

можно придумать какие-то костыли, типа хранить в глбальном редисе мапу юзер_ид => версия при запросе доставать эту версию и юзать как часть ключей для кеша в apcu когда меняются правила для юзера - версия инкрементится в редисе и автоматом инвалидируются кеши во всех apcu, но в замен у тебя дополнительный запрос в редис за версией кастомера

Sergey-P Автор вопроса

Да какие к черту файлики. В любом случае основная проблема инвалидация в случае нескольких серверов

почему не про пхп?

Sergey-P Автор вопроса

А как этот кастыль чем-то поможет?

постгрес точно может юникс-сокет слушать, как и мускуль/мария и по сети ходить не надо ) делаем дб кластер и пхп ходит по сокету )

Sergey-P Автор вопроса

Мы говорим про apcu и инвалидация когда у тебя скажем 5 реплик php fmp

тем что тебе не надо инвалидировать кеши вручную и писать какие-то ивент хендлеры для этого

Ну если речь идет про задержки отдачи например - и надо что-то очень быстро отдавать писать, и в этом контекте рассматриваются хранилище - то это смысла не имеет, т.к. сам пхп дает большие задержки. И проще взять какойнить голенг и будет локальная оперативка общая с внятными кешами процессора. если мы про задержки не говорим - то пофиг че, редис вполне

Sergey-P Автор вопроса

Но ты не знаешь когда версия меняется

ну не пхп даёт задержки а клиентская кодяра

Сори, я не знаю что на это ответить :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта