我正在学习redis,我有一个初学者问题。我知道 redis 就是关于键的!有什么方法可以查询/解析特定内容的键值吗?
假设我有键和一些 json 作为值。例如
key1 = {"id":"1", "colour":"red}
key2 = {"id":"2", "colour":"green}
key3 = {"id":"3", "colour":"red}
如何查询所有具有颜色=红色的“值(jsons)?
select all values WHERE colour==red
我正在学习redis,我有一个初学者问题。我知道 redis 就是关于键的!有什么方法可以查询/解析特定内容的键值吗?
假设我有键和一些 json 作为值。例如
key1 = {"id":"1", "colour":"red}
key2 = {"id":"2", "colour":"green}
key3 = {"id":"3", "colour":"red}
如何查询所有具有颜色=红色的“值(jsons)?
select all values WHERE colour==red
您需要的是字段上的反向索引colour
,即映射colour -> {keyA, ..., keyB}
,例如"red" -> {key1, key2}
.
Redis 中的集合是一个无序列表 [...] Ohm 在内部使用它来跟踪每个模型的实例以及生成和维护索引。
另请参阅 Didier Spezia 的这个答案。
总结一下:以查询的方式存储数据。
这是欧姆在幕后发生的事情。
首先声明您的 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