collection item 속성 구현체는 CollectionAttributes이며, 각 collection 유형의 item을 생성할 때 속성을 설정하기 위한 용도이다.
기본 생성자 new CollectionAttributes()를 생성할 때 default value가 설정된다.
속성 설정을 위해 setAttribute(), set() API를 사용할 때, 설정하지 않은 속성들은 default value로 설정된다.
CollectionAttributes 객체를 사용하여 collection 생성 시에 속성을 지정하는 예는 아래와 같다.
CollectionAttributes collectionAttributes = new CollectionAttributes();
//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 exception
return;
}
어떤 collection에 모든 element를 삽입하기 전까지는 다른 여러 thread에서 그 collection의 element를 조회하여서는 안 된다. 이를 위해, readable 속성을 false로 설정해 해당 collection을 읽을 수 없는 상태로 만들어두고 모든 element를 삽입한 후에 다시 readable 속성을 true로 설정하는 예는 아래와 같다.
// Unreadable list를 생성한다.
CollectionAttributes attribute = new CollectionAttributes();
attribute.setReadable(false);
CollectionFuture<Boolean> createFuture = null
try {
createFutre = client.asyncLopCreate(KEY, ElementValueType.STRING, attribute);
} catch (IllegalStateException e) {
// handle exception
return;
}
try {
createFuture.get(1000L, TimeUnit.MILLISECONDS);
} catch (Exception e) {
createFuture.cancel(true);
// throw an exception or logging.
}
// 여기에서 List를 갱신한다. 이 상태에서는 collection을 읽을 수 없다. 쓰기, 수정, 삭제만 가능하다.
// List를 Readable상태로 만든다.
CollectionAttributes attrs = new CollectionAttributes();
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를 사용하여 변경할 수 있다.