За последние 24 часа нас посетили 21803 программиста и 1013 роботов. Сейчас ищет 691 программист ...

Кеширование результатов выдачи в интернет магазине

Тема в разделе "PHP для профи", создана пользователем pr0n1x, 21 ноя 2019.

  1. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Привет.

    Подскажи как можно реализовать кеширование результатов выдачи в магазине по определенны параметрам.

    Например есть 3 таблицы, books, authors и category и пользователь может выбирать на сайте книги каких авторов ему нужно отобразить, так же может выбирать в какой категории книги отобразить и еще например может год выбирать книги и все это он можно одновременно выбирать, и по этим параметрам ему должен показаться результат.

    Нужно реализовать систему кеширование результатов, если другой человек укажет те же параметры, то ему отобразиться результаты из кеша?

    Если ли смысл такое вообще делать? И как это можно реализовать? Никогда не встречал такой задачи и не видел статей в интернете по такой теме
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Да, кэшировать списки из БД смысл имеет. Думайте о них как об обычных страницах, коими они и являются, со своими уник адресами. По адресам и кэшируйте.
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Например можете кэшировать в файлах с такими именами (с учетом пагинации списков):
    books#0 или books#1, books#2 и т.д. – список книг
    books/1 и т.д. – книга с указанным id (1); тут вроде бы списка нет, но тоже можно кэшировать
    authors/1#0 или authors/1#1, authors/1#2 – список книг автора с указанным id (1)
    с category – аналогично.
     
    #3 miketomlin, 21 ноя 2019
    Последнее редактирование: 21 ноя 2019
  4. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Отличная идея, спасибо. Но насколько такие кеши живучие по времени, ведь если добавить новый товар, то и кем нужно обновлять
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Да, кэш обычно чистится в админке при изменении соответствующих объектов или ветвей объектов. В наших сайтах в основном используется именно такой подход: переднеплановый движок кэширует, заднеплановый чистит кэш.
    --- Добавлено ---
    Про ветви – это когда, например, при редактировании книги 1 в ветке books, чистится не только books/1#..., но и books#..., и #... Но это, естественно, не охватывает все зависимости, поэтому ты можешь либо явно отслеживать все зависимости, либо чистить кэш целиком (фоновой задачей), когда происходит какое-то изменение. В общем тема не самая простая, но с чего-то нужно начинать.
     
  6. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    А что делаете когда пользователь не только указывает параметры поиска (грубо говоря галочки ставит), а еще вводить в поиск фразу по которой нужно найти? Вы эту фразу добавляете в уникальные адреса, или вы игнорируете фразу ищите по галочкам, получаете идишки товаров и уже только по ним ищите какие товары соответствуют фразе?
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    На наших сайтах используется Post-Redirect-Get, например после POST-запроса выполняется редирект методом GET по адресу /search/тут_уник_код_поискового_запроса, т.е. непосредственно поиск уже выполняется при запросе методом GET по указанному адреса.

    P.S. Кэшироваться могут далеко не все страницы. Например, пользователь может делать кучу «тупых» поисковых запросов с пустыми результатами. И вы будете забивать этими пустышками память/диск? Нет, конечно.
    --- Добавлено ---
    P.P.S. В принципе можно делать запрос методом GET прямо с формы. Так параметры запроса будут передаваться в GET-параметрах (в URL-кодировке).
    --- Добавлено ---
    Поисковая фраза может относиться к разному контенту. Есть полнотекстовый поиск. Есть, например, просто поиск по названиям чего-либо. В последнем случае ты можешь частично обработать поисковый запрос еще на этапе POST-обработки, заменив поисковую фразу идентификатором искомого объекта (или списком идентификаторов, если их не оч. много, а фраза относилась сразу к нескольким объектам).