2013-12-15 63 views
1

我需要在現有設置和來自用戶輸入的某些值之間執行Except操作。我怎樣才能做到這一點最好的方式? 我第一次考慮使用臨時集來存儲用戶的值。這將工作在多線程應用程序(網絡)?如果是這樣,我怎麼能確定臨時設置在我進行除外呼叫之前不被其他用戶覆蓋?還是我需要爲每個用戶設置一個唯一的臨時設置?Redis Booksleeve,臨時設置

也許交易是要走的路? http://redis.io/topics/transactions

回答

0

Set exceptset difference相同。在Redis中,我們將這種操作集稱爲差異,我們可以使用SDIFF命令或SDIFFSTORE命令來執行此操作,具體取決於我們是要返回結果還是將其存儲在新集中。這些都是建立在功能。

在你的情況下,因爲你的一個集合是用戶生成的,只需將整個事件封裝在pipeline中即可。這將作爲一個原子事務來運行整個操作,在Redis完成之前不會允許對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