Redis Event Notification

레디스 서버 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

Event Notification

이 기능은 2.8.0 부터 사용가능합니다.
레디스는 새로운 키 입력/변경 등의 이벤트가 발생할 때 알려주는 기능(Pub/Sub)이 있습니다.
이 문서는 버전 5.0.2를 기준으로 작성했습니다.

이벤트 종류

이벤트 종류는 다음과 같습니다.
  • 키(데이터) 입력/변경: set 같은 명령으로 키/값이 새로 입력되거나 수정될 때
  • 키 삭제: del 같은 명령으로 키가 삭제될 때
  • 키 만료 시간 설정으로 키가 삭제될 때
  • Maxmemory 정책으로 키가 퇴출(eviction)될 때

채널명 구성

  • 키 중심: __keyspace@<dbid>__:key command
  • 명령 중심: __keyevent@<dbid>__:command key

알림(publish) 방식

  • 키 중심: publish __keyspace@0__:key set
  • 명령 중심: publish __keyevent@0__:set key

받을 때

  • 모든 키에 대해서 받으려면: psubscribe __keyspace@0__:*
  • tag로 시작하는 키에 대해서 받으려면: psubscribe __keyspace@0__:tag*
  • 특정 키를 지정해서 받으려면: subscribe __keyspace@0__:tag0001
  • 모든 쓰기 명령에 대해서 받으려면: psubscribe __keyevent@0__:*
  • 특정 명령에 대해서 받으려면: subscribe __keyevent@0__:set

사용 예, 주의할 내용

  • 부하 분산을 위해서 마스터에는 이벤트 설정을 하지 않고 복제 서버에만 이벤트를 설정해서 클라이언트는 복제 서버에 접속해서 이벤트를 받을 수 있습니다.
  • mset key1 value1 key2 value2 -> __keyspace@0__:key1 set
                                                              __keyspace@0__:key2 set
  • incr key -> __keyspace@0__:key incrby
  • decr key -> __keyspace@0__:key incrby
  • rename key1 key2 -> __keyspace@0__:key1 rename_from
                                          __keyspace@0__:key2 rename_to
  • unlink key -> __keyspace@0__:key del -> dbSyncDelete()/dbAsyncDelete()
  • pexpire key -> __keyspace@0__:key expire
  • set key value ex 10 -> __keyspace@0__:key set
                                          __keyspace@0__:key expire
  • lpop mylist -> __keyspace@0__:mylist lpop
                              __keyspace@0__:mylist del <- 마지막 원소가 삭제되었으면
                              ltrim, lrem, srem, spop, 등도 마찬가지 입니다.
  • smove myset myset2 mem1 -> __keyspace@0__:myset srem
                                                            __keyspace@0__:myset2 sadd
  • zadd myzset incr 10 mem1 -> __keyspace@0__:myzset zincr
  • zincrby myzset 10 mem1 -> __keyspace@0__:myzset zincr
  • 키가 만료되어 이벤트를 받으면: __keyspace@0__:key expired
  • 위 경우 복제 서버에서 받으면: __keyspace@0__:key del
  • Maxmemory 설정으로 키가 삭제된 경우: __keyspace@0__:key evicted
  • 위 경우 복제 서버에서 받으면: __keyspace@0__:key del

이벤트 종류

  • K   Keyspace events, publish prefix "__keyspace@<db>__:".
  • E   Keyevent events, publish prefix "__keyevent@<db>__:".
  • g   공통 명령: del, expire, rename, ...
  • $   스트링(String) 명령
  • l   리스트(List) 명령
  • s   셋(Set) 명령
  • h   해시(Hash) 명령
  • z   소트 셋(Sorted set) 명령
  • x   만료(Expired) 이벤트 (키가 만료될 때마다 생성되는 이벤트)
  • e   퇴출(Evicted) 이벤트 (최대메모리 정책으로 키가 삭제될 때 생성되는 이벤트)
  • A   모든 이벤트(g$lshzxe), "AKE"로 지정하면 모든 이벤트를 받는다.

이벤트 설정

  • notify-keyspace-events "KEA": 모든 이벤트를 발생
  • notify-keyspace-events "Kg": 키 이벤트 + 공통 명령 발생
  • notify-keyspace-events "Kx": 키 이벤트 + 만료 이벤트 발생
  • notify-keyspace-events "": 이벤트 제거

<< Replication Performance Client Side Caching >>

조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.