【问题标题】:Redis Booksleeve, temporary setRedis Booksleeve,临时集
【发布时间】:2013-12-18 07:32:56
【问题描述】:

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

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

【问题讨论】:

    标签: redis booksleeve


    【解决方案1】:

    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.
    

    【讨论】:

    • 谢谢伊莱。我今天会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多