У меня есть 2 идеи.
Идея № 1:
С помощью Redis выведите людей, которые в данный момент онлайн, в сет. Затем со стороны клиента пользователь будет периодически отправлять запрос на отправку ему статуса для всех своих друзей. Сервер будет делать sql-запрос, чтобы найти всех друзей и найти их в наборе redis, и если это так, то они в сети.
Идея № 2:
Используя Redis PubSub, когда вы, как пользователь, находитесь в сети, вы подписываетесь на все n каналов друзей. И всякий раз, когда пользователь выходит в онлайн, он публикует на канале, что он или она онлайн. А тот, кто, возможно, слушает, получит уведомление.
Теперь я не могу сказать, какой из них более масштабируемый и эффективный.