Obecnie sesje zapisywane są w Redis. W sesji zapisany jest też URL pod którym aktualnie przebywa użytkownik.
Problemem było wyświetlanie listy użytkowników dostępnych na danych podstronach. Na produkcji, przy kilku tysiącach sesji działało to wolno. Wyciąganie kilku tysięcy rekordów z redis, następnie wyszukiwanie czy dany użytkownik znajduje się na danej podstronie, nie sprawdzało się.
Postanowiłem więc w cronie, co 1 min. zapisywać sesje z Redis do tabeli sessions
. Tutaj już łatwo można odszukać użytkowników przebywających na danej podstronie: SELECT user_id FROM sessions WHERE path LIKE '/forum/off-topic/%'
. Co 1 minute wykonywane jest jednak zapytanie DELETE
na tabeli, a następnie INSERT
. Może macie pomysł jak można by to lepiej rozwiązać?