如何在 Jedis 中使用 Redis 中的多个键?二级索引

how to use multiple keys in Redis with Jedis? Secondary index

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

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

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

喜欢,sql 查询我可以使用 JSON 中除了键以外的其他字段进行查询?

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

“有时我需要在 json”中使用另一个值搜索有效负载“=32=]

你不能,Redis 不是为此而构建的。 Redis 很快,主要用于键值存储。如果 json 中有很多字段需要索引,则需要一个关系数据库。是的,你可以使用 redissearch.io,但你应该注意它的免费版本不允许你在 AWS 或 Azure 等平台上使用,你必须部署自己的 Redis,并且它不支持 redis-cluster .所以直接用关系型数据库或者Elasticsearch就更好了

但是,如果您只需要一两个额外的索引来查找值(json payload in your case),则可以高效地实现。

将您的 json 存储为 redis STRING

{"someKey","your json payload"}

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

{"myRedisHash",[{"someKey",""your json payload"},{"anotherKey","another json"}]}

(HASH 比 STRING 节省一些内存)

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

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

所以它基本上将您的 second_index 映射到您的主键。在更新主值 STRING/HASH 的同时维护第二个索引哈希。对第三个、第四个索引执行相同的操作。

注意多个操作不是原子的,如果它对你很重要,你应该把它们写在Lua scrip。

JRediSearch a client for the Redis module RediSearch, 提供 Jedis 的扩展,允许使用简单的查询命令在 Redis 中轻松定义二级索引。

例如

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

SearchResult res = client.search(q);