我正在学习redis,我有一个初学者的问题。我知道redis就是钥匙!有没有办法查询/解析特定值的键的值?
假设我有键和一些json作为值。 e.g。
key1 = {"id":"1", "colour":"red}
key2 = {"id":"2", "colour":"green}
key3 = {"id":"3", "colour":"red}
如何查询具有color = red?
的所有“值(jsons)”select all values WHERE colour==red
答案 0 :(得分:12)
您需要的是colour
字段上的反向索引,即地图colour -> {keyA, ..., keyB}
,例如"red" -> {key1, key2}
。
Redis中的一个集合是一个无序列表[...]它由Ohm内部使用,用于跟踪每个模型的实例以及生成和维护索引。
请参阅Didier Spezia的这篇answer。
总结:以您查询的方式存储数据。
以下是欧姆在幕后发生的事情。
首先声明您的Ohm模型,并将colour
属性编入索引,因为您要查询它:
require "ohm"
class Doc < Ohm::Model
attribute :colour
index :colour
end
然后创建一些文档:
ruby> Doc.create(:colour => "red")
ruby> Doc.create(:colour => "green")
ruby> Doc.create(:colour => "red")
在此步骤中检查存储在相关索引中的Ohm:
redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"
再创建一个红色文档:
ruby> Doc.create(:colour => "red")
重新检查索引:
redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"
3) "4"
索引已更新以反映最后一条记录。
现在您可以有效地查询文档:
ruby> Doc.find(:colour => "red").each {|d| puts d.id}
1
3
4