Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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
Java 如何在Redis中对绝地使用多把钥匙?二级索引_Java_Redis_Jedis - Fatal编程技术网

Java 如何在Redis中对绝地使用多把钥匙?二级索引

Java 如何在Redis中对绝地使用多把钥匙?二级索引,java,redis,jedis,Java,Redis,Jedis,redis是否支持字符串数据类型的二级索引 我想知道如何将数据与seconday密钥一起存储在redis中 例如,假设我想将键值为'id:'的实体存储,并将其有效负载存储为压缩的json字符串。但有时我需要用json中的另一个值搜索有效负载,该值可能也是唯一的 比如,sql查询,我可以用JSON中除了键之外的其他字段进行查询吗 另外,我想知道在使用主键在redis中设置值时,如何为其设置二级索引值。“有时我需要用json中的另一个值搜索有效负载” 你不能,Redis不是为这个而建的。Redis速

redis是否支持字符串数据类型的二级索引

我想知道如何将数据与seconday密钥一起存储在redis中

例如,假设我想将键值为'id:'的实体存储,并将其有效负载存储为压缩的json字符串。但有时我需要用json中的另一个值搜索有效负载,该值可能也是唯一的

比如,sql查询,我可以用JSON中除了键之外的其他字段进行查询吗

另外,我想知道在使用主键在redis中设置值时,如何为其设置二级索引值。

“有时我需要用json中的另一个值搜索有效负载”

你不能,Redis不是为这个而建的。Redis速度很快,主要用于键值存储。如果json中有很多字段需要索引,则需要一个关系数据库。是的,您可以使用redisearch.io,尽管您应该注意到它的免费版本不允许您在AWS或Azure等平台上使用,但您必须部署自己的Redis,而且它不支持Redis群集。所以,如果只使用关系数据库或Elasticsearch,效果会更好

然而,如果您只需要一个或两个额外的索引来查找值(在您的例子中是json负载),那么它可以高效地实现

将json存储为redis字符串

{“someKey”,“你的json负载”}

这里没什么不寻常的。 或者更好,就像redis散列一样

{“myRedisHash”、[{“someKey”、“您的json负载”}、{“另一个json”}]}

(哈希在字符串上节省一些内存)

然后将第二个索引存储在redis散列中

{“mysecondexhash”[{“第二个索引”\u1“,”someKey“},{“第二个索引”\u2“,”另一个索引”}]}

因此,它基本上将第二个索引映射到主键。在更新主值字符串/哈希时,维护第二个索引哈希。对第三个、第四个索引执行相同的操作

注意,多个操作不是原子操作,如果这对您很重要,您应该将它们写在Lua scrip中。

Redis模块的客户机提供了一个对Jedis的扩展,允许使用简单的查询命令在Redis中轻松定义二级索引

e、 g

Query q=新查询(“@品牌:丰田”)
.addFilter(新查询.NumericFilter(“价格”,0,1000))
.限值(0,5);
SearchResult res=client.search(q);
您是否检查了或?