Memcached-CAS 명령
CAS는 Check-And-Set 또는 Compare-And-Swap을 의미합니다. MemcachedCAS명령은 마지막 페치 이후 업데이트되지 않은 데이터를 설정하는 데 사용됩니다. Memcached에 키가 없으면 다음을 반환합니다.NOT_FOUND.
통사론
Memcached의 기본 구문 CAS 명령은 다음과 같습니다-
set key flags exptime bytes unique_cas_key [noreply]
value
구문의 키워드는 다음과 같습니다.
key − Memcached에서 데이터를 저장하고 검색하는 데 사용되는 키의 이름입니다.
flags − 서버가 사용자가 제공 한 데이터와 함께 저장하는 32 비트 부호없는 정수로, 아이템 검색시 데이터와 함께 반환됩니다.
exptime− 만료 시간 (초)입니다. 0은 지연이 없음을 의미합니다. exptime이 30 일을 초과하는 경우 Memcached는이를 만료를위한 UNIX 타임 스탬프로 사용합니다.
bytes− 저장해야하는 데이터 블록의 바이트 수입니다. Memcached에 저장해야하는 데이터의 길이입니다.
unique_cas_key − gets 명령에서 얻은 고유 키입니다.
noreply (optional) − 응답을 보내지 않도록 서버에 알리는 파라미터입니다.
value− 저장해야하는 데이터입니다. 위의 옵션으로 명령을 실행 한 후 데이터를 새 줄로 전달해야합니다.
산출
명령의 출력은 다음과 같습니다.
STORED
STORED 성공을 나타냅니다.
ERROR 데이터 저장 중 오류 또는 잘못된 구문을 나타냅니다.
EXISTS 마지막으로 가져온 이후 누군가가 CAS 데이터를 수정했음을 나타냅니다.
NOT_FOUND Memcached 서버에 키가 없음을 나타냅니다.
예
Memcached에서 CAS 명령을 실행하려면 Memcached gets 명령에서 CAS 토큰을 가져와야합니다.
cas tp 0 900 9
ERROR
cas tp 0 900 9 2
memcached
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 2
redis
EXISTS
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END
Java 애플리케이션을 사용하는 CAS
Memcached 서버에서 CAS 데이터를 가져 오려면 Memcached를 사용해야합니다. gets 방법.
예
import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
public static void main(String[] args) {
// Connecting to Memcached server on localhost
MemcachedClient mcc = new MemcachedClient(new
InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server successful");
System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());
// Get cas token from cache
long castToken = mcc.gets("tutorialspoint").cas;
System.out.println("Cas token:"+castToken);
// now set new data in memcached server
System.out.println("Now set new data:"+mcc.cas("tutorialspoint",
castToken, 900, "redis"));
System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
}
}
산출
프로그램을 컴파일하고 실행하면 다음 출력을 볼 수 있습니다.
Connection to server successful
set status:true
Cas token:3
Now set new data:OK
Get from Cache:redis