当搜索基于关键模式时,除扫描之外的任何替代搜索选项

问题描述 投票:0回答:1

我使用redis作为数据库。这是我正在使用的键和值的示例。 key 和 value 都是字符串类型。 关键 - Shipping_rate:64:MNR:送货上门。它是 item_id (64)、item_type (MNR)、送货服务 (Home-Delivery) 等 3 个字段的组合。我在密钥之前附加服务名称 (shipping_rate)。

值是一个 json 字符串 - {"PRD_CAT_NAME" : "PTO PARTS", "SHIPMENT_CHG" : "20.9", "ITEM_CHG" : "12.99", "CONSOLIDATION" : "N", "AREA_UPCHARGE" : "0", “MISC_UPCHARGE”:“0”,“ACTIVE_FLAG”:“Y”}'

现在我想使用类似shipping_rate:64:MNR:* 的模式获取所有密钥。这里我的搜索只是基于模式,因为这是要求。我正在使用 SCAN 进行搜索。在我的 Spring Boot Java 代码中,我使用 ScanOptions。然后想要查询 redis db 以获取从 SCAN 操作获得的键列表。

现在我想知道对于这种情况还有比SCAN更好的解决方法吗?

我正在寻找二级索引,但在键上添加二级索引是个好主意吗?即使这是可能的,并且我将所有键保留在一个集合中(用于索引),那么我也需要使用模式从集合中进行搜索,这是不可能的,因为 SMEMBERS 不适用于模式搜索。

如果扫描是此场景的唯一方法,并且我的 Redis 数据库有 5000 万条记录,那么 SCAN 的性能如何?有没有人知道这种情况的任何指标

redis spring-data-redis
1个回答
0
投票

不要使用包含 JSON 的字符串,而是考虑使用 JSON 键。然后,您可以索引 JSON 键并使用 Redis 查询引擎根据其内容而不是名称来搜索特定键。

© www.soinside.com 2019 - 2024. All rights reserved.