2015-01-14 75 views
2

我需要redis中2個大集合交集的長度(SCARD)。Redis:找到SINTER結果的SCARD而不存儲中間集合

那麼,這達到了我想要的:

> SINTERSTORE intermediate s:1 s:2 
> SCARD intermediate 

然而,集大,所以我不想讓存儲中間值。從概念上說,我想要:

> SCARD (SINTER s:1 s:2) 

有沒有辦法在一個命令中實現這一點,也許與Lua腳本?或者,我最好用我的應用程序語言編寫腳本,並在完成後刪除中間值?例如使用python和redis-py:

>>> r = redis.Redis(...) 
>>> pipe = r.pipeline() 
>>> res = pipe.sinterstore('intermediate', 's:1', 's:2').scard('intermediate').delete('intermediate').execute() 
>>> print res[1] 

回答

4

Redis不會執行嵌套命令,因此概念版本雖然對描述需求很有幫助,但不支持。

我建議你使用中間值方法,而不是流水線使用事務(MULTI/EXEC)來包裝相交,基數和刪除操作。

+1

對我而言。請注意,在'redis-py'中,相當於'MULTI' /'EXEC'實際上被包裝到管道對象的功能中(爲此目的,它們具有名爲'multi'和'execute'的方法)。 – rchang

+0

@rchang謝謝! RTFMing後,我看到redis-py的管道默認是事務性的#LearnSomethingNewEveryDay :) –

+0

謝謝你們。我將使用管道方法。 –

相關問題