[AWS][ElastiCache] Redis 오래된 키 식별 및 삭제
[AWS][ElastiCache] Redis 오래된 키 식별 및 삭제
문의 사항
안녕하세요.
elasticache for redis 관련 몇가지 문의 드립니다.
1. elasticache for redis 지표를 확인해보니 사용가능한 메모리 양이 점점 줄어들고있어, 오래된 키들을 식별하여 일괄삭제 하고싶습니다
-> 3개월 이상된 키들 확인이 가능한지
-> 3개월 이전 데이터를 일괄로 삭제하는 방법
2. redis Json value 에 List 가 최대 100개까지 저장이 가능하다고 전달받았는데 그 설정이 redis 에 되어있는것인지, redis 자체에 되어있는 설정이라면 변경하는 방법 문의드립니다. (redis 설정이 아닌 저희쪽 어플리케이션 설정일수도있을 것 같습니다.)
3. 2번 문의에서 value 를 list 형태로 저장한다고 말씀드렸는데 각 key 에 몇개의 value 가 묶여있는지 조회하는 방법이 있는지 문의드립니다.
감사합니다.
답변
안녕하세요.
1.
우선 오래된 키들을 식별하기 위해서는 어플리케이션 코드에서 AWS Redis에 키를 만들 때 타임스탬프 또는 TTL을 설정하도록 수정해야합니다.
만약 위 설정이 되어 있다면 해당 값을 기준으로 직접 삭제하시면 됩니다.
설정이 되어 있지 않다면 원하는 방식의 삭제는 어려우나 maxmemory-policy 를 allkeys-lru 로 수정(기본값은 volatile-lru)하여 유사한 방식으로 삭제를 진행할 수 있습니다.
2.
관련해서는 최근 문의 이력에서 확인이 되지 않습니다만 Redis 는 메모리 용량에 의해 제한되기 때문에 다루시는 Json 데이터에 따라 제한이 100개 근처일 수는 있습니다.
말씀 하신 대로 어플리케이션 에서의 제어일 확률이 높을 것으로 보입니다.
추가적으로 도움이 될 내용을 말씀 드리면,
OBJECT <subcommand>
를 활용해 키에 대한 상세 정보를 확인할 수 있습니다.
OBJECT help 치시면 사용 방법을 알 수 있으며
OBJECT IDLETIME KEY 명령을 치면, 키가 호출되지 않은 시간(초)이 얼마나 됐는지를 확인 하실 수 있습니다.
삭제해도 되는 키를 식별 후 -> 위 커맨드를 이용해 호출 되지 않은 시간 확인 -> 실제 삭제하는 프로그래밍이 좀 필요하실 듯 합니다.
https://redis.io/docs/latest/commands/object/
그 외 Expire 명령을 통해 키에 Expire 설정 옵션 정보도 공유 드립니다.
Expire key seconds [NX | XX | GT | LT]
NX: 해당 키에 만료 시간이 정의돼 있지 않을 경우에만 커맨드 수행
XX: 해당 키에 만료 시간이 정의돼 있을 때만 커맨드 수행
GT: 현재 키가 가지고 있는 만료 시간보다 새로 입력한 초가 더 클 때에만 수행
LT: 현재 키가 가지고 있는 만료 시간보다 새로 입력한 초가 더 작을 때에만 수행
https://redis.io/docs/latest/commands/expire/
2,3번에 관해 말씀 드리면, JSON 사용에 있어서 64MB , 중첩 깊이(nested)는 128 까지 라는 제약이 있습니다.
말씀 주신 List가 동일 레벨의 [ {a:1}, {b:2}, {c:3} ] 이와 같은 json을 어레이 처럼 나열한 것과는 조금 다른 개념의 제약 사항으로 보입니다
https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-document-overview.html
JSON.OBJLEN 이라는 명령이 있는데 이것으로 원하시는 조회가 될지 모르겠습니다.
https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-objlen.html
감사합니다.