arcus-memcached
arcus-memcached copied to clipboard
touch 기능 개발
memcached 프로젝트에는 지정한 키에 대해 expire time을 재설정하는 touch 기능이 존재한다. 이를 ARCUS에도 개발하도록 한다. 만약 키가 존재하지 않는다면 NOT_FOUND를 반환한다.
이슈 제가 맡아 진행 하겠습니다.
기본적으로 memcached protocol과 호환을 위해서 touch
와 gat
명령이 제공되어야 할 것입니다.
redis에서 gat
에 대응되는 명령을 제공하는지를 먼저 확인해야 할 것 같습니다.
@cheesecrust redis에서 특정 item에 대한 expire time을 조작하는 명령으로 어떤 명령을 제공하고 있는지 확인하고 알려주면 좋겠습니다.
memcached 에서의 touch
, gat
-
touch
: 주어진 key 에 대해서 item 을 fetch 하지 않고 expire time 만을 재설정 합니다. -
gat
:touch
와 하는 일은 같지만, item 을 fetch 하여 가져옵니다.
redis 에서의 대응되는 명령
-
우선 redis 에도
touch
명령어가 있지만, redis 의touch
는 key 의 last access time 을 바꾸는 것으로 redis 의 LRU 정책과 관련이 있어 보입니다. -
현재 redis 에서는 expire time 과 관련해서 제공하는 명령은
EXPIRE
,PEXPIRE
을 제공합니다.-
EXPIRE
: key 의 expire 값을 재설정 합니다. 단위는 second 입니다. -
PEXPIRE
: key 의 expire 값을 재설정 하는데, 이때의 단위가 millisecond 입니다.
-
하지만 redis 의 만료시간은 key 마다 설정되기 때문에 일반 KV 타입은 모두 EXPIRE
명령어로 설정 할 수 있지만, Collection 타입에 있어서는 collection 자체는 키에 대응 되기 때문에 리스트나 맵에 대해서는 만료시간을 설정 할 수 있지만 그 안의 item에 대해서는 설정할 수 없습니다.
정리하자면 redis 에는 key 의 expire time 을 재설정 하는 EXPIRE
명령이 존재하지만, redis 의 ttl 은 item 이 아닌 key 에 부여되기 때문에 KV 관계와 collection 타입일 경우 전체 collection 자체 (item 들을 담는 리스트나 맵을 뜻합니다.) 에 이 명령을 사용하여 ttl 을 조절합니다.
하지만 redis 의 만료시간은 key 마다 설정되기 때문에 일반 KV 타입은 모두 EXPIRE 명령어로 설정 할 수 있지만, Collection 타입에 있어서는 collection 자체는 키에 대응 되기 때문에 리스트나 맵에 대해서는 만료시간을 설정 할 수 있지만 그 안의 item에 대해서는 설정할 수 없습니다.
- cache item: 하나의 key에 대응
- element: collection type의 item에서, 각 item에 속한 하위 원소들
위 용어 기준으로, arcus도 item(key) 단위로 expire time이 설정되고, 개별 element 수준에서 만료 시간을 설정할 수는 없습니다.
expire time 재설정
- redis에서는
EXPIRE
명령으로 제공 (redis의TOUCH
는 memcached의touch
와 다른 명령) - item type과 무관하게
touch <key> <exptime>\r\n
으로 제공 가능할 것
데이터 조회하면서 expire time 재설정
- redis에서는 제공하지 않는듯 함
- collection type에서 조회와 touch를 함께 수행하는 연산을 제공하려면 새로운 인터페이스 설계가 필요