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

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

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

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

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

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

24 ответов

7 просмотров

А в чем проблема юзать 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 Автор вопроса

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

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

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
.
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
.
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Кто может подсказать? Я преобрпзовал изображение в бинарное(у меня установлен трекбар который при установленном значении меняет пиксели на белый если меньше и чёрный если боль...
Константин VS
6
Карта сайта