如何在redis中使用多个密钥?二级索引

lyfkaqu1  于 2021-06-10  发布在  Redis
关注(0)|答案(2)|浏览(569)

redis是否支持字符串数据类型的二级索引?
我想知道如何在redis中存储数据以及备用键。
例如,假设我想将键值为'id:<some\u string>'的实体存储,并将其有效负载存储为压缩的json字符串。但有时我需要用json中的另一个值来搜索负载,这个值可能也是唯一的。
比如,sql查询,我可以用json中除了key以外的其他字段进行查询吗?
另外,我想知道在redis中使用主键设置值时,如何为它设置二级索引值。

oxosxuxt

oxosxuxt1#

jredisearch是redis模块redisearch的客户机,它提供了对jedis的扩展,允许通过简单的查询命令在redis中轻松定义二级索引。
例如

Query q = new Query("@brand:Toyota")
                    .addFilter(new Query.NumericFilter("price", 0, 1000))
                    .limit(0,5);

SearchResult res = client.search(q);
juud5qan

juud5qan2#

“有时我需要用json中的另一个值搜索有效负载”
你不能,redis不是为这个而建的。redis速度很快,主要用于键值存储。如果json中有很多字段需要索引,那么就需要一个关系数据库。是的,你可以使用redisearch.io,尽管你应该注意到它的免费版本不允许你在aws或azure等平台上使用,但你必须部署自己的redis,而且它不支持redis集群。因此,如果您只使用关系数据库或elasticsearch,效果会更好。
但是,如果您只需要一个或两个额外的索引就可以找到值(在您的例子中是json负载),那么它可以高效地实现。
将json存储为redis字符串
{“somekey”,“你的json负载”}
这里没什么不寻常的。或者更好,就像redis hash一样
{“myredishash”、[{“somekey”、“your json payload”}、{“anotherkey”、“another json”}]}
(哈希在字符串上节省一些内存)
然后将第二个索引存储在redis hash中
{“mysecondindexhash”、[{“second\u index\u 1”、“somekey”}、{“second\u index\u 2”、“anotherkey”}]}
所以它基本上把第二个索引Map到主键。在更新主值字符串/哈希的同时,维护第二个索引哈希。对你的第三个,第四个索引做同样的操作。
注意,多个操作不是原子的,如果这对您很重要,您应该用lua scrip编写它们。

相关问题