2013-12-15 3 views
1

기존 세트와 사용자가 입력하는 일부 값 사이에 예외 연산을 수행해야합니다. 어떻게하면 좋을까요? 먼저 사용자가 값을 저장하는 임시 세트를 사용하려고 생각했습니다. 다중 스레드 응용 프로그램 (웹)에서 작동합니까? 그렇다면 예외 호출을 수행하기 전에 다른 사용자가 임시 세트를 덮어 쓰지 않는 것을 어떻게 확인할 수 있습니까? 아니면 각 사용자에 대해 고유 세트 임시 세트가 필요합니까?Redis Booksleeve, 임시 세트

어쩌면 거래가 진행될 수 있습니까? http://redis.io/topics/transactions

답변

0

Set exceptset difference과 동일합니다. Redis에서는이 작업 집합 차이를 호출하고 결과를 반환할지 아니면 새 집합에 저장할지에 따라 SDIFF 명령 또는 SDIFFSTORE 명령을 사용하여 수행 할 수 있습니다. 이들은 모두 함수에 내장되어 있습니다.

귀하의 경우 귀하의 세트 중 하나가 사용자 생성이므로 전체 내용을 pipeline에 캡슐화하십시오. 이 작업은 전체 작업을 하나의 원자 트랜잭션으로 실행하여 완료 될 때까지 Redis에 대한 다른 작업을 허용하지 않습니다 (Redis의 단일 스레드 속성으로 인해). 이것은 (Python과 Redis-py를 예제 언어로 사용하여) 다음과 같습니다.

pipe = redis.pipeline() 
pipe.sadd('user_set', 'user_val1', 'user_val2', 'user_valn') 
diff_result = pipe.sdiff('my_set', 'user_set') 
pipe.del('user_set') 
pipe.execute() 
#do whatever with diff_result here. 
+0

감사합니다. Eli. 나는 오늘 이것을 시도 할 것이다. – Thomas

+0

잘 작동합니다 :) – Thomas