Key-Value Item

Key-value item은 하나의 key에 대해 하나의 value만을 저장하는 item이다.

제약조건

  • Key의 최대 크기는 4000 character이다.

  • Cache item의 최대 크기는 1MB이다.

Key-value item에 대해 수행가능한 연산들은 아래와 같다.

Key-Value Item 저장

key-value item을 저장하는 API로 set, add, replace를 제공한다.

OperationFuture<Boolean> set(String key, int exp, Object obj)
OperationFuture<Boolean> add(String key, int exp, Object obj)
OperationFuture<Boolean> replace(String key, int exp, Object obj)
  • <key, obj>의 key-value item을 저장한다.

  • Cache에 해당 key의 존재 여부에 따라 각 API 동작은 다음과 같다.

    • set은 <key, obj> item을 무조건 저장한다. 해당 key가 존재하면 교체하여 저장하다.

    • add는 해당 key가 없을 경우만, <key, obj> item을 저장한다.

    • replace는 해당 key가 있을 경우만, <key, obj> item을 교체하여 저장한다.

  • 저장된 key-value item은 exp 초 이후에 삭제된다.

수행 결과는 future 객체를 통해 얻는다.

future.getStatus().getStatusCode()
설명

StatusCode.SUCCESS

저장 성공

StatusCode.ERR_NOT_STORED

저장 실패 (add : 이미 존재하는 key, replace : 주어진 key에 해당하는 item이 없음)

key-vlaue item에 주어진 value를 추가하는 API로 prepend, append를 제공한다.

OperationFuture<Boolean> prepend(long cas, String key, Object val)
OperationFuture<Boolean> append(long cas, String key, Object val)
  • key-value item에서 value 추가 위치는 API에 따라 다르다.

    • prepend는 item의 value 부분에서 가장 앞쪽에 추가한다.

    • append는 item의 value 부분에서 가장 뒤쪽에 추가한다.

  • 첫째 인자인 cas는 현재 이용되지 않으므로 임의의 값을 주면 된다. 초기에 CAS(compare-and-set) 연산으로 수행하기 위한 용도로 필요했던 인자이다.

수행 결과는 future 객체를 통해 얻는다.

future.getStatus().getStatusCode()
설명

StatusCode.SUCCESS

저장 성공

StatusCode.ERR_NOT_STORED

저장 실패 (주어진 key에 해당하는 item이 없음)

한번의 API 호출로 다수의 key-value items을 set하는 bulk API를 제공한다.

Future<Map<String, OperationStatus>> asyncStoreBulk(StoreType type, List<String> key, int exp, Object obj)
Future<Map<String, OperationStatus>> asyncStoreBulk(StoreType type, Map<String, Object> map, int exp)
  • 다수의 key-value item을 한번에 저장한다.

    • 전자 API는 key list의 모든 key에 대해 동일한 obj로 저장 연산을 한번에 수행한다.

    • 후자 API는 map에 있는 모든 <key, obj>에 대해 저장 연산을 한번에 수행한다.

  • 저장된 key-value item들은 모두 exp 초 이후에 삭제된다.

  • StoreType은 연산의 저장 유형을 지정한다. 아래의 유형이 있다.

    • StoreType.set

    • StoreType.add

    • StoreType.replace

expiration은 key가 현재 시간부터 expire 될 때까지의 시간(초 단위)을 입력한다. 시간이 30일을 초과하는 경우 expire 될 unix time을 입력한다. 그 외에 expire 되지 않도록 하기 위해 아래 값을 지정할 수 있다.

  • 0: key가 expire 되지 않도록 설정한다. 하지만 ARCUS cache server의 메모리가 부족한 경우 LRU에 의해 언제든지 삭제될 수 있다.

  • -1: key를 sticky item으로 만든다. Sticky item은 expire 되지 않으며 LRU에 의해 삭제되지도 않는다.

저장에 실패한 키와 실패 원인은 future 객체를 통해 Map 형태로 조회할 수 있다.

future.get().get(key).getStatusCode()
설명

StatusCode.ERR_NOT_FOUND

Key miss (주어진 key에 해당하는 item이 없음)

StatusCode.ERR_EXISTS

동일 key가 이미 존재함

Key-Value Item 조회

하나의 key를 가진 cache item에 저장된 value를 조회하는 API를 제공한다.

GetFuture<Object> asyncGet(String key)
  • 주어진 key에 저장된 value를 반환한다.

수행 결과는 future 객체를 통해 얻는다.

future.get(key).getStatusCode()
설명

StatusCode.SUCCESS

조회 성공(key에 해당하는 item 존재하지 않아도 성공)

여러 key들의 value를 한번에 조회하는 bulk API를 제공한다.

BulkFuture<Map<String, Object>> asyncGetBulk(Collection<String> keys)
BulkFuture<Map<String, Object>> asyncGetBulk(String... keys)
  • 다수 key들에 저장된 value를 Map<String, Object> 형태로 반환한다.

  • 다수 key들은 String 유형의 Collection이거나 String 유형의 나열된 key 목록일 수 있다.

하나의 key를 가진 cache item에 저장된 CASValue를 조회하는 API를 제공한다.

GetFuture<CASValue<Object>> asyncGets(String key)
  • 주어진 key에 저장된 CASValue(cas, value)를 반환한다.

수행 결과는 future 객체를 통해 얻는다.

future.get(key).getStatusCode()
설명

StatusCode.SUCCESS

조회 성공(key에 해당하는 item 존재하지 않아도 성공)

여러 key들의 CASValue를 한번에 조회하는 bulk API를 제공한다.

BulkFuture<Map<String, CASValue<Object>>> asyncGetsBulk(Collection<String> keys)
BulkFuture<Map<String, CASValue<Object>>> asyncGetsBulk(String... keys)
  • 다수 key들에 저장된 CASValue를 Map<String, CASValue> 형태로 반환한다.

    Key-Value Item 값의 증감

    key-value item에서 value 부분의 값을 증가시키거나 감소시키는 연산이다. ([주의] 증감 연산을 사용하려면, 반드시 value 값이 String 유형의 숫자 값이어야 한다.)

    OperationFuture<Long> asyncIncr(String key, int by)
    OperationFuture<Long> asyncDecr(String key, int by)
    • key에 저장된 정수형 데이터의 값을 by 만큼 증가/감소시킨다. key가 cache에 존재하지 않으면 증감연산은 수행되지 않는다.

    • 반환되는 값은 증감 후의 값이다.

    OperationFuture<Long> asyncIncr(String key, int by, long def, int exp)
    OperationFuture<Long> asyncDecr(String key, int by, long def, int exp)
    • key에 저장된 정수형 데이터의 값을 by 만큼 증가/감소시킨다. key가 cache에 존재하지 않으면 <key, def> item을 추가하며, exp 초 이후에 삭제된다.

    • 반환되는 값은 증감 후의 값이다.

    수행 결과는 future 객체를 통해 얻는다.

    future.getStatus().getStatusCode()
    설명

    StatusCode.SUCCESS

    증감 성공

    StatusCode.ERR_NOT_FOUND

    증감 실패 (Key miss, 주어진 key에 해당하는 item이 없음)

    Key-Value Item 삭제

    하나의 key에 대한 item을 삭제하는 API와 여러 key들의 item들을 한번에 삭제하는 bulk API를 제공한다.

    OperationFuture<Boolean> delete(String key)
    • 주어진 key를 가진 item을 cache에서 삭제한다.

    수행 결과는 future 객체를 통해 얻는다.

    future.getStatus().getStatusCode()
    설명

    StatusCode.SUCCESS

    삭제 성공

    StatusCode.ERR_NOT_FOUND

    삭제 실패 (Key miss, 주어진 key에 해당하는 item이 없음)

    Future<Map<String, OperationStatus>> asyncDeleteBulk(List<String> key)
    Future<Map<String, OperationStatus>> asyncDeleteBulk(String... key)
    • 다수의 key-value item을 한번에 delete한다.

    • 다수 key들은 String 유형의 List이거나 String 유형의 나열된 key 목록일 수 있다.

    delete 실패한 키와 실패 원인은 future 객체를 통해 Map 형태로 조회할 수 있다.

    future.get().get(key).getStatusCode()
    설명

    StatusCode.ERR_NOT_FOUND

    삭제 실패 (Key miss, 주어진 key에 해당하는 item이 없음)

  • 다수 key들은 String 유형의 Collection이거나 String 유형의 나열된 key 목록일 수 있다.

Last updated