Redis Booksleeve,临时设置

时间:2013-12-15 12:53:08

标签: redis booksleeve

我需要在现有集合和来自用户的输入之间执行一个Except操作。我怎样才能以最好的方式做到这一点? 我第一次考虑使用临时集来存储用户的值。这将在多线程应用程序(Web)中工作吗?如果是这样,在进行除外呼叫之前,如何确保其他用户不会覆盖临时设置?或者我是否需要为每个用户设置一个唯一的临时集?

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

1 个答案:

答案 0 :(得分:0)

Set exceptset difference相同。在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.