2016-10-27 7 views
0

최근 웹 API에 키 공간 알림이 필수적이었습니다 이 개발되었습니다.flushdb로 Redis Keyspace 알림

하늘빛으로 설정되었습니다. API는 대부분 작동하며, 알림을 사용하여 메모리 캐시의 데이터를 업데이트해야하는지 확인합니다.

지금은 redis 데이터베이스를 플러시 할 경우 로컬 메모리 캐시를 지우기 위해 flush 이벤트를 알리는 처리를하고 싶습니다. 하지만 Keyspace 알림을 통해 flushdb 이벤트를 가져올 수 없습니다. 그리고 keyspace 이벤트는 "AKE"로 사용 가능합니다. "AKE"문자열은 모든 이벤트를 의미합니다.

PS : 우리가 '2 __ @ __keyevent : 설정'와 같은 '설정'이벤트와 알림을받을 수있는 등록 코드는 다음과 같다

.

subscriber.Subscribe(
      "*", 
      (channel, value) => 
      { 
       // Some codes here 
      }); 

답변

0

다른 답변과 마찬가지로 알림이 없습니다.

는 결국, KEYSPACE 알림하나의 키에 이벤트에 대한 알림입니다. 각 통지는 키와 연관됩니다. keyspace 이벤트의 경우 키 이름은 채널 이름의 일부입니다. keyevent 이벤트의 경우 키 이름이 메시지입니다.

PUBLISH [email protected]__:key_name comamnd 
PUBLISH [email protected]__:command key_name 

알림을 보내는 각 명령에는 인수로 키가 있어야합니다. 예 : del key, set key val. 그러나 flushdb 명령에는 인수로 키가 없습니다. 이 명령은 단일 키에 영향을주지 않습니다. 대신 데이터베이스의 모든 키를 제거합니다. 따라서 그러한 통지는 없습니다. 그렇지 않으면 채널에서 무엇을 기대합니까? 삭제 된 모든 키? 좋은 생각이 아닙니다.

그러나

  1. 이 특수 키, 예를 들어, 설정 flushdb에 대한 이벤트를 시뮬레이션 할 수 있습니다 flushdb-event :
  2. set flushdb-event 0가 해당 채널에 가입 : 당신이 flushdb를 호출하기 전에 subscribe [email protected]__:flushdb-event
  3. 특수 키를 설정 : set flushdb-event 1

이러한 방법으로, 당신은 시뮬레이션 flushdb 통지를 얻을 수 있습니다.

0

두 가지 옵션이 있다고 생각합니다.

  1. 당신은 INFO command를 주기적으로 전화 flushdb 또는 flushall 호출 수의 변화를 확인할 수 있습니다. 다음은 내가 언급 한 정보의 출력입니다.

    Commandstats

    cmdstat_flushall : 호출 = 2, 마이크로 초 = 112, usec_per_call = 56.00 cmdstat_flushdb = 1 마이크로 초 = 110, usec_per_call = 52.00

  2. 당신은 MONITOR command을 실행하고 출력을 구문 분석 할 수 호출 . 이것은 실제로 좋은 옵션이 아니라는 점에 유의하십시오. 이는 서버 측에 큰 성능 영향을 미치고 클라이언트 측에서 많은 처리를 요구합니다.