복붙노트

[REDIS] 레디 스는 게시 / 구독 : 채널이 현재 가입하고있는 무슨 참조

REDIS

레디 스는 게시 / 구독 : 채널이 현재 가입하고있는 무슨 참조

나는 현재 채널이 내가 가지고 레디 스 펍 / 하위 응용 프로그램에 가입 무엇을보고에 관심이 있어요. 클라이언트가 우리의 서버에 연결되면, 우리는 채널에 등록 외모 같은 것을 :

사용자 : USER_ID

그 이유는 내가 "온라인"누가 볼 수있게 할 것입니다. 나는 현재 맹목적으로 그들이 이러한 유형의 메시지를 수신하는 것이 중요하지 이후 클라이언트가 온라인 인 경우 모르게 채널에 메시지를 해고.

스마트 한 내 응용 프로그램을 만들기위한 노력의 일환으로, 나는 클라이언트가 술집 / 하위 API를 사용하여 온라인인지 여부를 발견 할 수 있도록하고 싶습니다, 그들이 오프라인 경우, 내가 밀어 수있는 별도의 레디 스 큐에 자신의 메시지를 캐시 그들에게 그들이 온라인으로 돌아 오면.

이 100 % 정확하지 않지만, 더 정확하게는 더 나은입니다. 나는 그래서 사소한으로 뭔가를 할 수 없습니다, 채널이 가입됩니다 때 일반적인 키가 생성되지 않습니다 있으리라 믿고있어 :

레디 스-CLI 키 사용자는 * 모든 온라인 사용자를 찾을 수 있습니다.

내가 생각 한 다른 전략은 사용자가 게시 또는 제거 자체 채널에서 (이 클라이언트를 자동으로 온라인으로 뛰어 핸들을 닫습니다 응용 프로그램) 때마다 내 자신의 레디 스 설정을 유지하고있다. 내가 관리해야하고 이미 가능한 데이터로 더 사소한 방법이 바라고 있어요 것을 그 복잡성의 추가 계층 것입니다.

해결법

  1. ==============================

    1.레디 스 2.8으로 당신이 할 수 있습니다 :

    레디 스 2.8으로 당신이 할 수 있습니다 :

    PUBSUB CHANNELS [pattern]
    

    N 활성 채널의 개수 인 곳 PUBSUB 채널 명령은 O (N) 복잡도를 갖는다.

    귀하의 경우 이렇게 :

    redis-cli PUBSUB CHANNELS user*
    

    당신이 원하는 원하는 줄 것입니다.

  2. ==============================

    2.어떤 명령에 등록되는 방식으로 어떤 채널 "존재"를 표시하기위한 현재 없지만, "승인"문제 및 끌어 오기 요청이 구현이하고있다.

    어떤 명령에 등록되는 방식으로 어떤 채널 "존재"를 표시하기위한 현재 없지만, "승인"문제 및 끌어 오기 요청이 구현이하고있다.

    https://github.com/antirez/redis/issues/221 https://github.com/antirez/redis/pull/412

    이 때문에 호출의 특성으로 확장 할 수있는 일이 아니며, 따라서 "DEBUG"명령입니다.

    그러나, 문제를 해결하기 위해 몇 가지 다른 방법이 있습니다. 당신이 채널에 등록 될 수 있음을 믿을만한 이유가있는 경우, 당신은 결과에 그것에게 메시지와 모양을 보낼 수 있습니다. 결과는 메시지를 받았습니다 가입자의 수입니다. 0을 가지고 있다면, 당신은 그들이이없는 거 알아.

    당신의 user_ids 증분 것을 가정하면, 존재를 추적하기 위해 사용자의 비트 오프셋 (offset)로 설정하는 1 또는 0을 SETBIT를 사용에 관심이있을 수 있습니다. 그런 다음 온라인으로 얼마나 많은 사용자가 볼 수있는 새로운 BITCOUNT처럼 멋진 일을 할 수 있고, 특정 사용자가 온라인 인 경우 GETBIT 확인합니다.

    내가 과거에 더 구체적으로 문제를 해결 한 방법은 내가 채널에 가입했는지 구독 매니저 신호입니다. 관리자 다음 "핑"사용자가 온라인 상태인지 확인 후에 핑에게 가끔 채널을 가입자가 있는지 확인하려면 빈 메시지를 전송하고,에 의해 채널. 이상하지만, 더 나은 생산 DEBUG 채널을 사용하는 것보다하지 않습니다.

  3. ==============================

    3.나는 채널을 구독되고 있는지 쿼리에 대한 구체적인 방법을 모르고 생각하고,이 경우 생성 된 키가없는 것을 당신이 올바른지 확인합니다. 또한, 나는 그것이 정말 디버깅 명령의 같은 키, 어쨌든 생산에 명령을 사용하지 않을 것입니다.

    나는 채널을 구독되고 있는지 쿼리에 대한 구체적인 방법을 모르고 생각하고,이 경우 생성 된 키가없는 것을 당신이 올바른지 확인합니다. 또한, 나는 그것이 정말 디버깅 명령의 같은 키, 어쨌든 생산에 명령을 사용하지 않을 것입니다.

    당신은 그들이 온라인 상태 사용자를 추가 세트를 사용하는 방법에 대한 올바른 생각을 가지고, 다음 SISMEMBER <설정>으로이를 조회 메시지가 한 번에 처리하는 레디 스 목록에 보내거나 추가 할 필요가있는 경우 결정 그들은 온라인 않습니다.

    온라인 사용자 목록에서 제거 할 수 있도록 사용자가 로그 오프 할 때 파악해야합니다,하지만 난 당신이 그것에 대해 갈 것이라고 정확히 어떻게 알 수있는 시스템에 대해 충분히 알지 못한다.

    연결된 클라이언트가 메시지 (들) 소비되었다는 서버를 알리는 메시지 등을 보낼 수있는 기능이있는 경우 메시지가 나중에 검색을 위해 보관해야하는 추적하려면이 옵션을 사용할 수 있습니다.

    건배, 마이크

  4. ==============================

    4.버전 2.8.0 레디 스이 경우에하는 데 유용한 pubsub 명령이 있습니다 :

    버전 2.8.0 레디 스이 경우에하는 데 유용한 pubsub 명령이 있습니다 :

    http://redis.io/commands/pubsub

    비 고 : 현재 2.8.0의 상태가 안정 아직 아니다 (RC2)

  5. ==============================

    5.당신은 FastoRedis 또는 FastoNoSql, 펍 / 하위 대화 상자를 사용할 수 있습니다.

    당신은 FastoRedis 또는 FastoNoSql, 펍 / 하위 대화 상자를 사용할 수 있습니다.

  6. ==============================

    6.* PUBSUB NUMSUB [채널 1 ... 채널 N] 반환 가입자 수가 지정된 채널 (계산하지 않고 클라이언트는 패턴에 가입). https://redis.io/commands/pubsub

    * PUBSUB NUMSUB [채널 1 ... 채널 N] 반환 가입자 수가 지정된 채널 (계산하지 않고 클라이언트는 패턴에 가입). https://redis.io/commands/pubsub

  7. from https://stackoverflow.com/questions/10952837/redis-publish-subscribe-see-what-channels-are-currently-subscribed-to by cc-by-sa and MIT license