티스토리 뷰

2014년 TFT 프로젝트에서 Redis 이벤트와 관련하여 기능이 필요하여 개발된 프로젝트이다.



RedisPlus 를 개발하게 된 계기는

  1. Redis 이벤트의 Key Expired 이벤트 외에 Key Expiring 이벤트가 필요했는데, **Key Expiring **이벤트는 Redis Key 가 만료가 되었을 때, 만료전에 발생하는 이벤트이고, Key Expired 는 키를 만료시킨 후에 발생하는 이벤트이다.

  2. Redis 이벤트 만료 시 만료되는 키만을 반환하기 때문에 키의 값이 무엇인지만 알 수 없다는 문제가 있다.

Expiring Key Event

Expiring 키 이벤트는 키와 값을 반환한다. 따라서 Redis's Expiring Event 를 이용하여 동기화 매커니즘을 구현할 수 있게 된다.

예를 들어, 키에 값이 없으면 DB 나 외부통신을 통해 최신의 값을 가져온다.
키에 새로운 값을 넣을 때 마다 1분 후 만료시간을 주고, 다시 새로운 값이 오면 다시 1분 만료시간을 준다.
그런 후 1분 만료가 되기 직전, DB 또는 외부통신을 통해 만료되는 키와 값을 전달하고, 키를 만료 시킨다.

1. 먼저 서버에서 구독을 하도록 subscribe keyspace-events 설정

> config set notify-keyspace-events KEA
> PSUBSCRIBE '__key*__:expiring'

2. 키를 3초후에 만료하도록 mykey 키와 값을 설정.

SET mykey "you can get key and value" ex 3

3. 3초 후. mykey 키는 키와 값을 함께 구독한다.

1) "pmessage"
2) "__key*__:expiring"
3) "__keyevent@0__:expiring"
4) "mykey"
5) "you can get key and value"   << IMPORTANT: You got it is value of key.


댓글