小智 64
您的选择如下:
LREM如果找到则使用并替换它.SET与您的一起保持独立LISTLIST直到找到物品或到达终点.Redis列表实现为http://en.wikipedia.org/wiki/Linked_list,因此存在限制.
我认为你最好的选择是保持重复SET.这就是我倾向于做的事情.只需将其视为额外索引.无论如何,请确保您的操作是原子的MULTI- EXEC或Lua脚本.
Ber*_*set 25
列表允许重复但不提供检查存在的简单方法,并且@Fritzy建议,您需要:
我很惊讶没有人建议你使用哈希表或排序集,它结合了允许双重性的优点(通过存储元素的数量作为值- 哈希表,或得分- 排序集)和索引成员的性质的哈希台/套.
要检查密钥是否存在,请使用HEXISTS特定字段,0如果指定的成员不存在,则返回该字段.您也可以使用该HGET命令.nil如果指定的成员不存在,它将返回一个答案.
要添加新成员,只需使用HINCRBY哪个将更新值(即具有成员名称的元素数)或创建新成员(如果不存在).
要检查密钥是否存在,请使用以下三个命令之一:
ZSCOREZRANKZREVRANKnil如果指定的成员不存在,则返回答案.
要添加新成员,只需使用ZINCRBY哪个将更新分数(即具有成员名称的元素数)或创建新成员(如果不存在).
总结:排序集或哈希表允许您使用单个命令完成符合您要求的所有操作.
Rav*_*ina 19
您也可以使用LPOS.
当该项目存在时,它返回一个指示位置的数字:
LPOS mylist myitem
3
Run Code Online (Sandbox Code Playgroud)
如果不是,它返回nill:
LPOS mylist myitem_which_do_not_exits
(nil)
Run Code Online (Sandbox Code Playgroud)
笔记:
不,无法检查redis列表是否包含给定值.请参阅Redis list命令以供参考.
我想你可以使用LREM(尝试)删除值,并检查返回值以查看它是否被删除.但是你必须把它放回去,这似乎是不确定的.你的问题可能有一些更好的解决方案 - 你想要完成什么?
小智 5
令我惊讶的是,没有人提到这个套装,它完美地解决了这个问题。
使用sismember密钥值在组,它会检查是否该值是关键的成员。
这是示例:
redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41431 次 |
| 最近记录: |