2

redis の 2 つの大きなセットの交点の長さ (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

1 に答える 1

4

Redis はネストされたコマンドを実行しないため、概念バージョンは必要性を説明するのに役立ちますが、サポートされていません。

中間値アプローチを使用することをお勧めしますが、パイプライン処理の代わりに、トランザクション (MULTI/EXEC) を使用して交差、カーディナリティ、および削除操作をラップします。

于 2015-01-14T18:19:14.257 に答える