здравствуйте. Не буду ещё раз говорить, что я новичек в php) Сварганил набор скриптов. Авторизация через post запрос, сессия, кука и пара скриптов, которые выдают авторизованным json ответы . Данные берутся с базы сторонней. Данные пользователезависимые. Некоторые данные для json обновляются в базе раз в полгода, а некоторые каждый день. Почитал про nginx. Со статикой у него вроде как все ок. А вот можно ли как то извратиться и закешировать эти json ответы ? Самый простой способ вижу такой. В основной базе для каждого пользователя хранить набор флагов изменения его данных и хранить в блобе уже сформированный json. Ну и из php отдавать то, что хранится в этом блобе. И каким нибудь планировщиком проверять изменился ли флаг изменения данных и генерировать содержимое блоба. Но в данном случае все равно будет дергаться база. Хоть и с меньшей нагрузкой. И если вдруг пользователь залипнет на кнопке "обновить", то из базы будет этот блоб дергаться довольно часто . Есть ли вариант эти json запросы закешировать nginx ? В запросе присутствует кука, сессия и некоторые параметры. Думал например ид пользователя вообще хранить в сессионной переменной. Тогда запросы вообще можно передавать на сервер без каких либо параметров кроме куки
Добавлю . Json запросы идут через post с передачей параметров . Сделал так наверно для того, чтоб "спрятать" параметры
для этого есть https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage Если информация общая для всех пользователей тогда redis
При запросе данных пользователем формировать кеш - файл с содержимым json, присваивать уникальный имя генерируемое на основе ид пользователя. При повторном запросе, по ид генерить имя смотреть есть ли файл если есть - отдавать иначе генерить. При любом изменении данных в json удалять кеш... Все.
допустим в php сделал запрос к базе. получил свой json. собственно недопонял как его запихнуть в кэш ngnix? допустим я его отдам и ngnix его закеширует. ок. собственно тогда возникает вопрос - а как из php я узнаю есть ли в кэше ngnix какой то файл? Или же имелся ввиду локальный кэш на пользовательском компе? хотя скорее всего имелось ввиду сгенерить файл и положить в какую нибудь директорию на сервере. А вот тут вот я насмотрелся страшилок про медленных пользователей и apache )) ЗЫ. тут решил посмотреть что есть memcache. как ни странно не нашел модуль для php 7.2.11 VC15 x86 под винду. Подключил тогда apcu. изменил один из скриптов. если в кэше apcu есть обьект - просто его отдавал через echo. правда сначала присваивал его переменной. Ну а если нет его в кэше - генерил, отправлял в кэш и отдавал. Запустил без apcu тест apache bench. на 1 минуту 10 контурентных. получил 148 Requests per second. локально на ноуте. включил apcu и получил те же 148 запросов в секунду. учитывая то, что база данных в принципе его уже закешировала. Конфиг apcu такой [apcu] apc.enabled=1 apc.shm_size=32M apc.ttl=7200 apc.enable_cli=1 что я в данном случае недопонял?) рассчитывал , что кеширование ну хоть какую то разницу покажет в Requests per second
По apc не скажу... А по nginx - php не надо знать чего и как там у него в Кеше. Php файл должен сгенерить статичный файл, и заменить его при изменении данных.... Остальное сделает nginx при правильной настройке. Ну и к бд точно не будет обращений лишних