хранение онлайн пользователей php + memcache - PullRequest
1 голос
/ 18 декабря 2010

Я думаю о хранении онлайн-пользователей в memcached.

Сначала я подумал о массиве пар ключ => значение, где ключом будет идентификатор пользователя и отметка времени последнего доступа.

Моя проблема в том, что это будет довольно большой массив, когда в сети сейчас много пользователей (и будет).

Поскольку memcached не предназначен для хранения больших данных, как бы вы решили это? Какая лучшая практика!

Спасибо за ваш вклад!

1 Ответ

4 голосов
/ 18 декабря 2010

Проблема с этим подходом заключается в том, что memcache может быть запрошен, только если вы заранее знаете ключ. Это означает, что вам придется хранить весь онлайн-список пользователей под одним известным ключом. Каждый раз, когда пользователь заходил в сеть или уходил в автономный режим, возникла необходимость прочитать список, настроить его и переписать. Там есть серьезный потенциал для состояния гонки, поэтому вам придется использовать механизм блокировки проверки и установки.

Я не думаю, что вы должны это делать. Подумайте о том, чтобы сохранить таблицу базы данных о последних посещениях пользователей:

user_id: int
last_seen: timestamp

Индекс по метке времени и идентификатору пользователя. Запросите друзей онлайн, используя:

SELECT user_id FROM online WHERE user_id IN (...) AND timestamp > (10 minutes ago);

Периодически просматривайте таблицу и пакетно удаляйте старые строки меток времени.

Когда ваш сайт становится большим, вы можете осквернить эту таблицу в user_id.

EDIT:

На самом деле, вы можете сделать это, если вам не нужно опрашивать всех пользователей, которые в данный момент онлайн, но нужно просто знать, есть ли определенные пользователи в сети.

  1. Когда пользователь переходит на страницу,

    memcache.set («онлайн» + user_id, true, 600 / * 10 минут * /);

  2. Чтобы увидеть, если пользователь онлайн,

    online = memcache.get ("online." + User_id);

Должен также быть способ для многопользовательского запроса memcache, посмотрите это. Некоторые странные вещи могут произойти, если вы добавите сервер memcache, но если вы будете использовать эту информацию для размещения маркера «онлайн» рядом с именами пользователей, это не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...