Key-value item์ ํ๋์ key์ ๋ํด ํ๋์ value๋ง์ ์ ์ฅํ๋ item์ด๋ค.
์ ์ฝ์กฐ๊ฑด
- Key์ ์ต๋ ํฌ๊ธฐ๋ 4000 character์ด๋ค.
- Cache item์ ์ต๋ ํฌ๊ธฐ๋ 1MB์ด๋ค.
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(key).getStatusCode() | ์ค๋ช |
|---|---|
| StatusCode.ERR_NOT_FOUND | Key miss (์ฃผ์ด์ง key์ ํด๋นํ๋ item์ด ์์) |
| StatusCode.ERR_EXISTS | ๋์ผ key๊ฐ ์ด๋ฏธ ์กด์ฌํจ |
ํ๋์ 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๋ค์ String ์ ํ์ Collection์ด๊ฑฐ๋ String ์ ํ์ ๋์ด๋ key ๋ชฉ๋ก์ผ ์ ์๋ค.
- key์ ์ ์ฅ๋ ์ ์ํ ๋ฐ์ดํฐ์ ๊ฐ์ by ๋งํผ ์ฆ๊ฐ/๊ฐ์์ํจ๋ค. key๊ฐ cache์ ์กด์ฌํ์ง ์์ผ๋ฉด ์ฆ๊ฐ์ฐ์ฐ์ ์ํ๋์ง ์๋๋ค.
- ๋ฐํ๋๋ ๊ฐ์ ์ฆ๊ฐ ํ์ ๊ฐ์ด๋ค.
- key์ ์ ์ฅ๋ ์ ์ํ ๋ฐ์ดํฐ์ ๊ฐ์ by ๋งํผ ์ฆ๊ฐ/๊ฐ์์ํจ๋ค. key๊ฐ cache์ ์กด์ฌํ์ง ์์ผ๋ฉด <key, def> item์ ์ถ๊ฐํ๋ฉฐ, exp ์ด ์ดํ์ ์ญ์ ๋๋ค.
- ๋ฐํ๋๋ ๊ฐ์ ์ฆ๊ฐ ํ์ ๊ฐ์ด๋ค.
- ์ฃผ์ด์ง key๋ฅผ ๊ฐ์ง item์ cache์์ ์ญ์ ํ๋ค.
- ๋ค์์ key-value item์ ํ๋ฒ์ deleteํ๋ค.
- ๋ค์ key๋ค์ String ์ ํ์ List์ด๊ฑฐ๋ String ์ ํ์ ๋์ด๋ key ๋ชฉ๋ก์ผ ์ ์๋ค.
key-value item์์ value ๋ถ๋ถ์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํค๋ ์ฐ์ฐ์ด๋ค. ([์ฃผ์] ์ฆ๊ฐ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ค๋ฉด, ๋ฐ๋์ value ๊ฐ์ด String ์ ํ์ ์ซ์ ๊ฐ์ด์ด์ผ ํ๋ค.)
OperationFuture<Long> asyncIncr(String key, int by)
OperationFuture<Long> asyncDecr(String key, int by)OperationFuture<Long> asyncIncr(String key, int by, long def, int exp)
OperationFuture<Long> asyncDecr(String key, int by, long def, int exp)์ํ ๊ฒฐ๊ณผ๋ future ๊ฐ์ฒด๋ฅผ ํตํด ์ป๋๋ค.
| future.getStatus().getStatusCode() | ์ค๋ช |
|---|---|
| StatusCode.SUCCESS | ์ฆ๊ฐ ์ฑ๊ณต |
| StatusCode.ERR_NOT_FOUND | ์ฆ๊ฐ ์คํจ (Key miss, ์ฃผ์ด์ง key์ ํด๋นํ๋ item์ด ์์) |
ํ๋์ key์ ๋ํ item์ ์ญ์ ํ๋ API์ ์ฌ๋ฌ key๋ค์ item๋ค์ ํ๋ฒ์ ์ญ์ ํ๋ bulk API๋ฅผ ์ ๊ณตํ๋ค.
OperationFuture<Boolean> delete(String key)์ํ ๊ฒฐ๊ณผ๋ 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)delete ์คํจํ ํค์ ์คํจ ์์ธ์ future ๊ฐ์ฒด๋ฅผ ํตํด Map ํํ๋ก ์กฐํํ ์ ์๋ค.
| future.get().get(key).getStatusCode() | ์ค๋ช |
|---|---|
| StatusCode.ERR_NOT_FOUND | ์ญ์ ์คํจ (Key miss, ์ฃผ์ด์ง key์ ํด๋นํ๋ item์ด ์์) |