Para saber se um determinado usuário está online ou não, o primeiro método será muito mais rápido - nada é mais rápido do que ler uma única chave.
Encontrar usuários em uma página específica não é tão claro (não vi números concretos sobre o desempenho das chaves de interseção ou curinga), mas se o conjunto for grande o suficiente para causar problemas de desempenho em qualquer implementação, não é prático exibir todos eles de qualquer maneira.
Para combinar usuários com uma lista de amigos, eu provavelmente usaria a primeira abordagem também - mesmo algumas centenas de operações get (verificando o status de todos na lista) devem superar a interseção em vários conjuntos se esses conjuntos tiverem um grande número de registros e forem difícil de manter.
Os conjuntos Redis são mais apropriados para coisas que não podem ser feitas com chaves, principalmente quando obter todos os itens do conjunto é mais importante do que verificar se um determinado item está no conjunto.