1

我需要在现有集合和来自用户输入的一些值之间执行例外操作。我怎样才能以最好的方式做到这一点?我首先考虑使用一个临时集来存储用户的值。这可以在多线程应用程序(Web)中工作吗?如果是这样,我怎么能确保临时集没有被其他用户覆盖,然后再执行除外调用?或者我是否需要为每个用户设置一个唯一的临时集?

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

4

1 回答 1

0

设置 except设置差异相同。在 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.
于 2013-12-17T23:32:56.277 回答