2017-12-05 7 views

답변

4

단일 명령이 없습니다. Lua 스크립트를 작성하거나 트랜잭션을 실행할 수있다. 트랜잭션처럼 간단하게 보일 것이다

127.0.0.1:6379> SET foo bar 
OK 
127.0.0.1:6379> MULTI 
OK 
127.0.0.1:6379> GET foo 
QUEUED 
127.0.0.1:6379> DEL foo 
QUEUED 
127.0.0.1:6379> EXEC 
1) "bar" 
2) (integer) 1 

는 루아 스크립트

127.0.0.1:6379> SET foo bar 
OK 
127.0.0.1:6379> EVAL "local x = redis.call('GET', KEYS[1]); redis.call('DEL', KEYS[1]); return x" 1 foo 
"bar" 
127.0.0.1:6379> GET foo 
(nil) 

모두 같은 동작을 사용하지만, 루아 스크립트, 스크립트는 캐시 할 수있는 전체 코드를 반복 할 필요가없는 다음에 전화하고 싶을 때. 스크립트를 캐시하고 후속 호출의 함수 이름으로 사용할 고유 ID를 반환하는 SCRIPT LOAD를 사용할 수 있습니다 (대부분의 클라이언트는 이것을 투명하게 추상화합니다).

127.0.0.1:6379> SCRIPT LOAD "local x = redis.call('GET', KEYS[1]); redis.call('DEL', KEYS[1]); return x" 
"89d675c84cf3bd6b3b38ab96fec7c7fb2386e4b7" 

127.0.0.1:6379> SET foo bar 
OK 

# Now we use the returned SHA of the script to call it without parsing it again: 
127.0.0.1:6379> EVALSHA 89d675c84cf3bd6b3b38ab96fec7c7fb2386e4b7 1 foo 
"bar" 
+0

다른 방법으로, 그 모듈을 개발할 수도 있습니다;) (upvoted oc). –

+0

트랜잭션에서 GET과 DEL 명령 사이에서 decr과 같은 다른 명령이 실행됩니까? – FridayLi

+0

@FridayLi 트랜잭션을 버퍼링하는 동안에 만 트랜잭션 실행 중에 발생할 수 없습니다. –