2013-05-18 53 views

回答

2

看起来你需要一套或一套有序集合。

集合具有O(1)成员测试和强制唯一性。

1

此功能在redis中使用hexistshexists命令进行设置。

+0

这不幸是最好的选择,虽然它很容易受到竞争条件的影响。 – Salgat

1

检查列表以查看其中是否存在成员是O(n),对于大型列表而言这可能会相当昂贵,而且绝对不理想。也就是说,其他人似乎都在给你选择。我只是告诉你如何去做你要做的事情,并且假设你有这样做的充足理由。我会做在Python中,假设你有一个Redis的连接称为r,一些列表称为some_list和一些新的项目添加一个名为new_item

lst = r.lrange(list_name, -float('Inf'), float('Inf')) 
if new_item not in lst: 
    r.rpush(list_name, new_item) 
+1

对于获取整个列表来说,'LRANGE 0 -1'不会更好吗? –

4

我需要做的是相同的。 我想从列表中删除元素,然后再次添加它。如果元素不在列表中,Redis的将返回0,所以没有错误

lrem mylist 0 myitem 
rpush mylist myitem 
+0

这必须是选定的答案。 –

3

由于托马索Barbugli提到的,​​如果你只需要唯一值,你应该使用一个设置,而不是一个列表。 see REDIS documentation SADD

redis> SADD myset "Hello" 
(integer) 1 
redis> SADD myset "World" 
(integer) 1 
redis> SADD myset "World" 
(integer) 0 
redis> SMEMBERS myset 
1) "World" 
2) "Hello" 

如果您要检查在设定值的存在,你可以使用SISMEMBER

redis> SADD myset "one" 
(integer) 1 
redis> SISMEMBER myset "one" 
(integer) 1 
redis> SISMEMBER myset "two" 
(integer) 0 
相关问题