Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php redis json sql风格查询_Php_Json_Redis - Fatal编程技术网

Php redis json sql风格查询

Php redis json sql风格查询,php,json,redis,Php,Json,Redis,我有一堆json要存储在Redis中 { "foo": "37", "bar": "Alex", "baz": "Tom", "type": "test", "date": "12/12/2012 12:12:12 } 但由于有sql背景,我不太确定最好的方法是什么: SELECT * FROM table WHERE "foo" = "37" AND "baz" = "test" ORDER BY date DESC 我看过散列,但我不清楚Redis

我有一堆json要存储在Redis中

{
    "foo": "37",
    "bar": "Alex",
    "baz": "Tom",
    "type": "test",
    "date": "12/12/2012 12:12:12
}
但由于有sql背景,我不太确定最好的方法是什么:

SELECT * FROM table WHERE "foo" = "37" AND "baz" = "test" ORDER BY date DESC

我看过散列,但我不清楚Redis是否能够像上面那样执行查询?

使用Redis实现这一点的方法是建立索引。例如,考虑以下流程将“数据”插入到哈希键中,并建立适当的索引:

HMSET somekeyname foo "37" bar "Alex" baz "Tom" type "test" date "12/12/2012 12:12:12"
SADD foo_index:37 somekeyname
SADD baz_index:test somekeyname
这将创建一个名为
somekeyname
的哈希类型的键,其中包含相关数据。此外,它将创建/更新两个集合,我们将它们用作索引。现在,要获取与SQL select语句匹配的键,请执行以下操作:

SINTER foo_index:37 baz_index:test

这将返回满足条件的任何键名称。排序结果可以在客户端完成,或者用SINTERSTORE替换SINTER,并在目标键上使用Redis的SORT命令。

不,您不能按字段搜索,因为Redis将数据存储为key=>value,其中key类似于id或hash,value是any。您只能通过密钥获取数据。Redis不是RDBMS,Redis是NoSQL存储。建议您使用MongoDB执行此操作。@num8er顺便说一句,MongoDB不是RDBMS,也是NoSQL。我知道,但它有在json数据中搜索的方法。我还知道,我可以通过将此字段存储为键来建立关系,以获取指向redis中完整json数据的值。但为什么要这样做呢?为什么要这么复杂?