回答
您的选项如下:
- 使用
LREM
和更换它,如果它被发现。 - 维护结合的独立
SET
与LIST
- 循环通过
LIST
直到找到该项目或到达终点。
Redis列表实现为http://en.wikipedia.org/wiki/Linked_list,因此有局限性。
我认为你最好的选择是保持重复SET
。这是我倾向于做的。只要把它看作一个额外的索引。无论如何,请确保您的操作与MULTI
- EXEC
或Lua脚本一致。
不,没有办法检查一个redis列表是否包含给定的值。请参阅Redis list commands以供参考。
我想你可以使用LREM
来(尝试)删除值,并检查返回值,看看它是否被删除。但是,那么你将不得不把它放回去,而这似乎是不合适的。你的问题可能有一些更好的解决方案 - 你想完成什么?
嗨linus,我想他是问是否存在“钥匙”。没有给定的值,因为你假设 – zotherstupidguy 2012-09-08 17:05:59
@babydudecoder他说他想检查一个密钥已经存在于一个redis列表中。我认为他的关键是redis列表的值。 – 2014-09-25 04:17:41
@Harry在大多数情况下,他似乎可以将列表替换为'hset' - 并使用'setnx',这与当然有一个真正的列表不太一样,但是散列表通常是快速查找的。 – user3467349 2015-02-03 19:33:36
列出允许重复,但不提供一个简单的方法来检查它是否存在,并为@Fritzy建议,您可能需要:
- 使多个操作(删除然后重新添加被发现)进行简单的检查= 成本及时
- 保持独立的一组= 成本在内存
我很惊讶没有人建议你使用一个哈希表或排序集其结合允许口是心非的优点(通过存储元件的数量作为数值- 哈希表,或评分- 有序集合),并通过自然分度部件散列表/集合。
哈希表
要检查键的存在,使用HGET
命令。如果指定的成员不存在,则返回nil
答案。
要添加新成员,只需使用HINCRBY
即可更新值(即具有成员名称的元素数)或创建新成员(如果不存在)。
有序集合
要检查钥匙的存在,可以使用以下三个命令中的任何一个:
ZSCORE
ZRANK
ZREVRANK
如果指定的成员不存在,则返回nil
答案。
要添加新成员,只需使用ZINCRBY
即可更新分数(即具有成员名称的元素数)或创建新成员(如果不存在)。
综上所述:有序集合或哈希表让你做出的所有操作符合您的要求用一个命令。
但是,如果有人使用有序集合,则无法确定列表中存在多个值的多个实例。如果我在列表中的任意位置具有值“Hello World”,那么只存储它出现的次数将无助于我找到这些实例的周围元素。 – 2016-07-17 14:50:14
@AnuraagVaidya这是另一个问题,在回答已被问到的问题的当前背景下是不相关的。 – 2017-03-27 09:08:09
- 1. 检查另一个表中是否存在列的值sql
- 2. Redis - 替代检查集合中是否存在多个值
- 3. 检查列表中是否存在某个值以外的值
- 4. 检查列中是否存在多个值中的一个
- 5. 检查序列中是否存在值
- 6. 检查一个值是否存在jqgrid列或不存在
- 7. 检查一个值是否存在于多个表中SQL Server
- 8. 如何检查列表框中是否存在某个值?
- 9. 检查SQL表中是否存在值
- 10. 如何检查表中的任何一列中是否存在一个值sql
- 11. jsoup检查一个表是否存在
- 12. 检查OleDb表中是否存在列
- 13. 检查表中是否存在列?
- 14. 检查列表中是否存在
- 15. 检查值是否在另一个表
- 16. 检查值是否不在列表中
- 17. 如何检查散列中的密钥是否存在(redis)?
- 18. Mysql检查一个值是否存在于哪一列
- 19. 检查是否在一个ArrayList中值存在于另一个
- 20. 检查一列中的一个值是否在另一列
- 21. 检查列表中是否存在值 - 查看日历
- 22. 检查以查看列表是否存在于另一个列表中?
- 23. 如何检查一个值是否在Perl的列表中?
- 24. 检查一个值是否在列表中
- 25. 检查是否存在,是否存在,是否为某个值
- 26. 检查是否所有的值在一个表中的列在另一个表
- 27. 检查列值是否存在于SQL的另一列中
- 28. 如何检查一个值是否在一系列值中?
- 29. 检查一个表是否包含列表中的值
- 30. 检查是否在另一个表中存在一个id
+1对于MULTI-EXEC – maximus 2014-06-23 10:36:38
@fritzy是否可以详细阐述如何实现SET/LIST或指向某处,谢谢。 – 2016-08-21 16:45:34
因为LREM和SREM都是O(N),所以最好不要单独设置(除非你打算删除整个集合而不是逐个项目)。 – 2017-03-17 20:18:50