如何使用Jedis在Redis中使用多个密钥?二级指数



redis是否支持字符串数据类型的辅助索引?

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

例如,假设我想将键值为'id:<some_string>'它的有效载荷是一个压缩的json字符串。但有时我需要用json中的另一个值来搜索有效负载,该值可能也是唯一的。

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

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

"有时我需要用json中的另一个值来搜索有效载荷

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

然而,如果您只需要一个或两个额外的索引来查找值(在您的情况下是json负载(,则可以有效地实现。

将您的json存储为redis STRING

{"someKey","您的json负载"}

这里没有什么异常。或者更好,如redis HASH

{"myRedisHash",["someKey","yourjson有效载荷"},{"anotherKey","otherjson"}]}

(HASH通过字符串节省一些内存(

然后将您的第二个索引存储在redis HASH 中

{"mySecondIndexHash",[{"second_index_1&","someKey"},{"second_index_2&",&"anotherKey"}]}

所以它基本上将second_index映射到主键。在更新主值STRING/hash时,您需要维护第二个索引哈希。对你的第三个、第四个索引也这样做。

请注意,多个操作不是原子操作,如果这对您来说很重要,您应该用Lua-scrip编写它们。

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);

最新更新