대빵's Blog

Redis 수정에 관계없이 정해진 시점에 데이터 삭제시키기. 본문

개발관련

Redis 수정에 관계없이 정해진 시점에 데이터 삭제시키기.

bigzero 2018. 3. 16. 17:16

Redis 수정에 관계없이 정해진 시간에 expire 처리하기(cron 처럼)

이번에 Redis를 사용하면서 느낀건 참 쉽게 사용가능한데 호불호가 극명하게 나뉘고 목적이 명확하게 사용되어야 한다는 점이다.

Redis 는 저장된 데이터에 expired time 을 설정하여 해당 데이터가 일정시간 지나면 없어지게 해준다. 

데이터가 생기면 모를까....없어지는데 왜 좋은건지 이해가 되지 않는다면 아직 개발을 좀 더 해봐야 된다.


개발시 가장 까다로운 요구사항 중 하나가 생성된 데이터를 특정시간 지나면 없애고 갱신해 달라는 요구사항이다. 

데몬을 띄워서 해당 데이터를 모니터링 하는 경우가 많아서 여러가지로 귀찮아 진다.


Redis 를 사용하면 데이터가 생성된 이후 일정시간 지나면 데이터를 없애 버리기 때문에 

데이터 생성 ->  데이터 저장 -> 데이터 모니터링 -> 데이터 삭제 -> 데이터 재생성 

이러한 싸이클을 

데이터 생성 -> 데이터 저장 -> 데이터 조회 없으면 재생성

이렇게 단순화 시킬 수 있다.


문제는 이 데이터를 내가 원하는 시간에 expired 시키기가 까다롭다는 것이다. 특히, 중간에 수정되더라도 상관없이 내가 원하는 시간에 데이터를 없애려면 약간의 기교가 필요하다.

다른 방법도 있겠지만 내가 사용한 방법은 데이터 저장시 별도의 key 값으로 expire되기 원하는 시간을 저장하는 것이다.

즉, 데이터 요청하면 해당 키값을 확인해서 키값의 데이터가 없거나 키값의 데이터가 현재시점 보다 과거라면

Redis 데이터를 지우고 갱신하면 된다.


사실 굉장히 간단한 내용이지만 이걸 생각해 내고 다른 방법이 없는지 구글질 하는 시간이 3일이나 걸렸다는....ㅡㅡ;