2010-12-17 2 views
18

저는 Redis의 신참입니다. 나는 세트를 둘러싼 특정 도움을 찾고 있습니다. 몇 가지 배경 설명 : 저는 각각 고유 한 ID를 가진 개별 카드 세트를 가진 수많은 카드 갑판으로 구성된 웹 앱을 만들고 있습니다. 특정 갑판에서 무작위로 5 장의 카드 세트를 가져 오기를 바랍니다.Redis에서 사본 세트 명령 (또는 대안)을 찾고

내 계획은 주어진 덱의 모든 카드 ID를 Redis의 집합으로 저장하는 것입니다. 그런 다음 SPOP 함수를 사용하여 개별 카드를 그려서 세트에서 제거하여 해당 카드가 그 손안에 다시 그려지지 않도록하고 싶습니다. 카드 ID의 데크의 '마스터 세트'를 새로운 임시 세트로 복사하고 복사를 실행 한 다음 복사가 완료되면 복사 된 세트를 삭제하여이 작업을 수행하는 것이 좋습니다.

하지만 설정 복사본을 명령하는 Redis 함수를 찾을 수 없습니다. 가장 가까운 것은 빈 세트를 만든 다음 빈 세트를 만들고 그 '빈 복사본'과 '마스터 복사본'을 '결합'하는 것입니다. SUNIONSTORE를 사용하여 새 것으로 설정 (임시적인 경우)하지만 이는 해킹 된 것처럼 보입니다. 대안을 설정 항목을 내 '호스트 언어'(node.js)에 복사 한 다음 항목을 새 Redis 세트에 수동으로 다시 삽입하는 것으로 가정 할 수 있지만 이는 또한 까다로운 것으로 보입니다. 아마 내가 생각조차하지 못한 더 나은 세 번째 옵션이있을 것입니다.

내가 뭔가 잘못하고있는 것입니까? 저는 Redis를 얻지 못하고 있습니까? 아니면 아직 미성숙 한 명령 집합입니까?

답변

61
redis> sadd mydeck 1 
(integer) 1 
redis> sadd mydeck 2 
(integer) 1 
redis> sadd mydeck 3 
(integer) 1 
redis> smembers mydeck 
1) "1" 
2) "2" 
3) "3" 
redis> sunionstore tempdeck mydeck 
(integer) 3 
redis> smembers mydeck 
1) "1" 
2) "2" 
3) "3" 
redis> smembers tempdeck 
1) "1" 
2) "2" 
3) "3" 

Redis! Salvatore

+1

감사합니다. @antirez,이 기능은 훌륭했습니다. –

+0

예, sunionstore 정말 좋습니다. – hahakubile