• Как реализовать счетчик "сейчас этот товар просматривают еще N человек"?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    Если решать проблему технически, то сперва надо определиться с частотой обновления или точностью. Что значит пользователь сейчас смотрит эту страницу? Активная вкладка браузера? А если он отвёл взгляд? )) И нужно ли действительно иметь такую высокую точность, какую бизнес-задачу это решает?
    На вскидку есть 3 способа:
    1) "дедовский": строить логи nginx таким образом, чтобы их удобно было парсить и брать число запросов на нужные страницы в интервал сканирования
    2) собирать статистику на уровне роутера приложения в redis (как предложили недавно выше)
    3) самый точный, но слишком накладный, это вебсокеты открывать на странице и считывать откуда они.
    Ответ написан
    Комментировать
  • Как реализовать счетчик "сейчас этот товар просматривают еще N человек"?

    sarapinit
    @sarapinit
    Точу водой камень
    На странице делать периодическую отправку состояния "объект просматривают". Складываете состояние в Redis HashSet со структурой:
    название хэша = id объекта
    ключ = id пользователя
    значение = timestamp
    Выбираете таймаут, например 5 секунд и считаете все записи старше 5 секунд невалидными.
    Для построения счетчика берете количество валидных элементов в хэше для конкретного объекта.
    Чтобы хэш не разрастался нужно удалять простроченные элементы т.к. Redis не умеет инвалидировать элементы хэшсета. Это можно делать периодически либо написать скрипт на lua который будет делать вставку нового элемента и одновременно удалять просроченные.
    Ответ написан
    Комментировать