回答
您的選項如下:
- 使用
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