collection item 속성 구현체는 CollectionAttributes이며, 각 collection 유형의 item을 생성할 때 속성을 설정하기 위한 용도이다.
기본 생성자 new CollectionAttributes()를 생성할 때 default value가 설정된다.
속성 설정을 위해 setAttribute(), set() API를 사용할 때, 설정하지 않은 속성들은 default value로 설정된다.
CollectionAttributes 객체를 사용하여 collection 생성 시에 속성을 지정하는 예는 아래와 같다.
CollectionAttributes collectionAttributes =newCollectionAttributes();//setAttribute(유형=값)으로 설정하며, 유형은 알파벳 소문자를 입력해야 한다.collectionAttributes.setAttribute("expiretime=10"); // item의 만료는 10초 뒤에 이루어진다.collectionAttributes.setAttribute("maxcount=1000"); // item의 최대 element 수는 1000개이다.collectionAttributes.setAttribute("overflowaction=error"); // maxcount를 초과하여 element를 추가할 경우 element를 추가하지 않고, overflow 오류를 반환한다.
// 아래와 같이 set() API를 이용해 동일하게 각 속성을 설정할 수도 있다.// set API를 이용시 compile time에 속성 값 검증이 가능하므로 set API를 이용한 속성 설정을 추천한다.collectionAttributes.setExpireTime(10);collectionAttributes.setMaxCount(1000);collectionAttributes.setOverflowAction(CollectionOverflowAction.error);//생성된 CollectionAttributes를 활용하여 Collection Item 생성String key ="Sample:List"try {client.asyncLopCreate(key,ElementValueType.OTHERS, collectionAttributes);} catch (IllegalStateException e) {// handle exceptionreturn;}
어떤 collection에 모든 element를 삽입하기 전까지는 다른 여러 thread에서 그 collection의 element를 조회하여서는 안 된다. 이를 위해, readable 속성을 false로 설정해 해당 collection을 읽을 수 없는 상태로 만들어두고 모든 element를 삽입한 후에 다시 readable 속성을 true로 설정하는 예는 아래와 같다.
// Unreadable list를 생성한다.CollectionAttributes attribute =newCollectionAttributes();attribute.setReadable(false);CollectionFuture<Boolean> createFuture =nulltry { createFutre =client.asyncLopCreate(KEY,ElementValueType.STRING, attribute);} catch (IllegalStateException e) {// handle exceptionreturn; }try {createFuture.get(1000L,TimeUnit.MILLISECONDS);} catch (Exception e) {createFuture.cancel(true);// throw an exception or logging.}// 여기에서 List를 갱신한다. 이 상태에서는 collection을 읽을 수 없다. 쓰기, 수정, 삭제만 가능하다.// List를 Readable상태로 만든다.CollectionAttributes attrs =newCollectionAttributes();attrs.setReadable(true);CollectionFuture<Boolean> setAttrFuture =mc.asyncSetAttr(KEY, attrs);try {setAttrFuture.get(1000L,TimeUnit.MILLISECONDS);} catch (Exception e) {setAttrFuture.cancel(true);// throw an exception or logging.}// 이제 collection을 읽을 수 있다.
두 번째 예제는 expiretime 속성을 변경하는 예제이다. 모든 item의 공통 속성인 expireTime을 설정할 시에는 Attributes를 사용하여 변경할 수 있다.