За последние 24 часа нас посетили 91670 программистов и 6147 роботов. Сейчас ищут 1353 программиста ...

Кеширование

Тема в разделе "PHP для новичков", создана пользователем sergq, 28 окт 2018.

  1. sergq

    sergq Новичок

    С нами с:
    14 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    здравствуйте.
    Не буду ещё раз говорить, что я новичек в php)

    Сварганил набор скриптов. Авторизация через post запрос, сессия, кука и пара скриптов, которые выдают авторизованным json ответы . Данные берутся с базы сторонней. Данные пользователезависимые.
    Некоторые данные для json обновляются в базе раз в полгода, а некоторые каждый день.
    Почитал про nginx. Со статикой у него вроде как все ок.
    А вот можно ли как то извратиться и закешировать эти json ответы ?

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

    Но в данном случае все равно будет дергаться база. Хоть и с меньшей нагрузкой. И если вдруг пользователь залипнет на кнопке "обновить", то из базы будет этот блоб дергаться довольно часто .

    Есть ли вариант эти json запросы закешировать nginx ? В запросе присутствует кука, сессия и некоторые параметры. Думал например ид пользователя вообще хранить в сессионной переменной. Тогда запросы вообще можно передавать на сервер без каких либо параметров кроме куки
     
  2. sergq

    sergq Новичок

    С нами с:
    14 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Добавлю . Json запросы идут через post с передачей параметров . Сделал так наверно для того, чтоб "спрятать" параметры
     
  3. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    При запросе данных пользователем формировать кеш - файл с содержимым json, присваивать уникальный имя генерируемое на основе ид пользователя. При повторном запросе, по ид генерить имя смотреть есть ли файл если есть - отдавать иначе генерить. При любом изменении данных в json удалять кеш... Все.
     
  5. sergq

    sergq Новичок

    С нами с:
    14 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    допустим в 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
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    По apc не скажу...
    А по nginx - php не надо знать чего и как там у него в Кеше. Php файл должен сгенерить статичный файл, и заменить его при изменении данных.... Остальное сделает nginx при правильной настройке. Ну и к бд точно не будет обращений лишних