Set Item
Set item은 하나의 key에 대해 unique value의 집합을 저장한다. 주로 membership checking에 유용하게 사용할 수 있다.
제약 조건
저장 가능한 최대 element 개수 : 디폴트 4,000개 (attribute 설정으로 최대 50,000개 확장 가능)
각 element에서 value 최대 크기 : 16KB
Element 값의 중복을 허용하지 않는다.
Set item에 수행가능한 기본 연산들은 다음과 같다.
Set Item 생성 (Set item 삭제는 key-value item 삭제 함수로 수행한다)
여러 set element들에 대해 한번에 일괄 수행하는 연산은 다음과 같다.
Set Item 생성
새로운 empty set item을 생성한다.
key: 생성할 set의 key
valueType: set에 저장할 value의 유형을 지정한다. 아래의 유형이 있다.
ElementValueType.STRING
ElementValueType.LONG
ElementValueType.INTEGER
ElementValueType.BOOLEAN
ElementValueType.DATE
ElementValueType.BYTE
ElementValueType.FLOAT
ElementValueType.DOUBLE
ElementValueType.BYTEARRAY
ElementValueType.OTHERS
attributes: set item의 속성들을 지정한다.
수행 결과는 future 객체를 통해 얻는다.
Set item을 생성하는 예제는 아래와 같다.
Empty set을 생성할 때에는 set에 어떤 타입의 element를 저장할 것인지를 미리 지정해 주어야 한다. 예제에서는 ElementValueType을 통해 지정할 수 있는 타입을 제외한 나머지들을 저장할 수 있는 empty set을 생성한다.
timeout은 1초로 지정했다. 생성에 성공하면 future는 true를 반환한다. 지정한 시간에 생성 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
생성 결과에 대한 상세 정보는 future.getOperationStatus().getResponse()를 통해 조회할 수 있다.
Set Element 삽입
Set에 하나의 element를 삽입하는 함수이다.
key: 삽입 대상 set의 key
value: 삽입할 element의 value
attributesForCreate: 대상 set이 존재하지 않을 시의 동작을 지정한다.
null: element 삽입하지 않는다.
attributes: 주어진 attributes를 가진 empty set item 생성 후에 element 삽입한다.
수행 결과는 future 객체를 통해 얻는다.
Set에 하나의 element를 삽입하는 예제는 아래와 같다.
attributesForCreate값이 null이 아니면 key가 존재하지 않을 때 attributesForCreate 속성을 가진 set을 새로 생성한 다음 element를 삽입한다. 만약 attributesForCreate값이 null이고 key가 존재하지 않는다면 element는 insert되지 않는다.
특별한 설정을 하지 않은 CollectionAttributes를 사용하며 기본 expire time은 0으로 만료되지 않음을 뜻한다.
참고로 이미 key가 존재하는 상태에서 value를 저장한다 하더라도 key에 설정된 expire time은 변하지 않는다. 다시 말해 value가 추가되어도 expire time은 변경되거나 연장되지 않는다.
timeout은 1초로 지정했다. 삽입에 성공하면 future는 true를 반환한다. 지정한 시간에 삽입 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
Set은 값의 중복을 허용하지 않는다. 중복 값의 유무에 따라 반환 값은 다음과 같이 달라진다.
이미 삽입된 값이 Set에 존재한다면 false를, 존재하지 않았다면 true를 반환한다.
삽입 결과에 대한 상세 정보는 future.getOperationStatus().getResponse()를 통해 조회할 수 있다.
Set Element 삭제
Set에서 주어진 value를 가진 element를 삭제하는 함수이다.
key: 삭제 대상 set의 key
value: 삭제할 element 값
dropIfEmpty: element 삭제로 인해 empty set이 될 경우, 그 set도 삭제할 것인지를 지정
수행 결과는 future 객체를 통해 얻는다.
Set에서 하나의 element를 삭제하는 예제이다.
dropIfEmpty값이 true이면 element를 삭제한 후 set이 비어있게 될 때 key도 함께 삭제한다.
timeout은 1초로 지정했다. 지정한 시간에 삭제 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
정상적으로 삭제되면 true를 반환한다. 자세한 삭제 결과는 future.getOperationStatus().getResponse() 로 확인 할 수 있다.
Set Element 존재여부 확인
Set에서 주어진 value를 가진 element의 존재여부를 확인한다.
key: 조회 대상 set의 key
value: 존재여부를 확인할 value
수행 결과는 future 객체를 통해 얻는다.
Set element의 존재여부를 확인하는 예제는 아래와 같다.
Key에 저장된 set에 value가 존재하는지 확인한다.
timeout은 1초로 지정했다. 값이 존재하면 future는 true를 반환한다. 지정한 시간에 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
조회 결과에 관한 자세한 내용은 future.getOperationStatus().getResponse()로 확인이 가능하다.
Set Element 조회
Set element를 조회하는 함수이다. 이 함수는 임의의 count 개 element를 조회한다.
key: 조회 대상 set의 key
count: 조회할 element 개수
withDelete: element 조회와 함께 그 element를 삭제할 것인지를 지정
dropIfEmpty: element 삭제로 인해 empty set이 될 경우, 그 set도 삭제할 것인지를 지정
수행 결과는 future 객체를 통해 얻는다.
Set element를 조회하는 예제는 아래와 같다.
Set collection에서 count개의 element를 조회한다. withDelete값이 true이면 조회한 다음 element를 set collection에서 삭제한다. dropIfEmpty값이 true이면 조회와 동시에 element가 삭제된 후 set이 비어있게 되면 key를 삭제한다.
timeout은 1초로 지정했다. 조회에 성공하면 future는 조회 결과를 반환한다. 지정한 시간에 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
조회 결과에 관한 자세한 내용은 future.getOperationStatus().getResponse() 로 확인이 가능하다.
Set Element 일괄 삽입
Set에 여러 element를 한번에 삽입하는 함수는 두 가지가 있다.
첫째, 하나의 key가 가리키는 set에 다수의 element를 삽입하는 함수이다.
key: 삽입 대상 set의 key
valueList: 삽입할 element들의 value list
attributesForCreate: 대상 set이 존재하지 않을 시의 동작을 지정한다.
null: element 삽입하지 않는다.
attributes: 주어진 attributes를 가진 empty set item 생성 후에 element 삽입한다.
둘째, 여러 key들이 가리키는 set들에 각각 하나의 element를 삽입하는 함수이다.
key: 삽입 대상 set들의 key list
value: 삽입할 element의 value
attributesForCreate: 대상 set이 존재하지 않을 시의 동작을 지정한다.
null: element 삽입하지 않는다.
attributes: 주어진 attributes를 가진 empty set item 생성 후에 element 삽입한다.
하나의 Set에 여러 element를 bulk insert하고 각각의 item에 대해 insert 결과를 확인하는 코드이다.
한꺼번에 insert할 아이템은 client.getMaxPipedItemCount()개를 초과할 수 없다. (기본값은 500개 이다.) 만약 개수를 초과하면 IllegalArguementException이 발생한다.
Key에 저장된 Set에 bulkData를 한꺼번에 insert하고 그 결과를 담은 future객체를 반환한다. 이 future로부터 각 아이템의 insert성공 실패 여부를 조회할 수 있다. 여기에서는 attributesForCreate 값을 지정하여 bulk insert하기 전에 key가 없으면 생성하고 element를 insert되도록 하였다.
timeout은 1초로 지정했다. 지정한 시간에 모든 아이템의 insert 결과가 넘어 오지 않거나 JVM의 과부하로 operation queue에서 처리되지 않을 경우 TimeoutException이 발생한다.
모든 아이템이 insert에 성공하면 empty map이 반환된다.
반환된 Map의 Key= insert한 값(bulkData)를 iteration했을 때의 index 값.
반환된 Map의 Value= insert 실패사유
일부 실패한 아이템의 실패 원인을 조회하려면 insert할 때 사용된 값(bulkData)의 iteration 순서에 따라 결과 Map을 조회하면 된다.
Future로부터 얻은 Map의 Key가 입력된 값(bulkData)의 index이기 때문에 위와 같은 방법으로 실패 원인을 조회하면 된다.
Set Element 일괄 존재여부 확인
Set에서 여러 element의 존재여부를 한번에 확인하는 함수이다.
key: 조회 대상 set의 key
values: 존재여부를 확인할 value list
수행 결과는 future 객체를 통해 얻는다.
결과로 반환된 result(Map<Object, Boolean>) 객체에서 다음과 같은 정보를 확인할 수 있다
아래 코드는 set안에 VALUE1부터 VALUE4의 존재유무를 판단하는 코드이다. 결과는 Map<Object, Boolean> 형태이며 결과값의 key는 존재 유무를 판단하기 위한 값이다. 그리고 그 값이 존재하면 map의 value는 true가 반환된다.
Value list에 포함된 값들이 set에 각각 존재하는지 조회한다.
결과는 Map<Object, Boolean>형태로 반환된다.
Map entry의 key는 존재유무를 판단하는 값이며
Map entry의 value는 존재유무를 나타내는 boolean값이다. (값이 존재하면 true)
Bulk exists결과에 대한 자세한 응답코드는 future.getOperationStatus().getResponse()를 통해 조회할 수 있다.
Last updated