在 Redis 中建模对象以获得最大的可搜索性

Modeling objects in Redis for maximum searchability

如何在 Redis 中为这种“对象”建模以获得最大的可搜索性?

public class Item {
    Double price;
    String geoHash;
    Long startAvailabilty; // timestamp
    Long endAvailabilty; // timestamp
    Set<Keywords> keywords;
    String category;
    String dateCreated; // iso date
    String dateUpdated; // iso date
    Integer likes;
    Boolean isActive;
}

哪里可以查询任何或所有值,例如价格范围,来自两个时间戳字段的时间戳范围查询,来自嵌入集和布尔值查询的关键字查询。按ISO日期排序,按赞数排序

Redis 不直接支持复杂搜索。所以我建议将所有搜索拆分为几个简单的搜索。 Item 模型也应该拆分。

  • 保存Item对象:
  1. 每个 Item 实例应该有一个唯一的键。
  2. Item 实例编码为字符串。例如:JSON 字符串。
  3. 使用唯一键和编码字符串值在 redis 中保存 Item 个实例。
  • 对于价格范围搜索:
  1. 使用 ZADD,使用键保存到排序集:PRICE_RANGE 得分:Item price value 成员:Item unique key.
  2. 使用ZRANGEBYSCORE获取价格范围内的会员。
  3. 迭代成员(项目的唯一键)以获取所有项目
  4. 解码所有项目
  • 对于时间戳范围查询...
  • 对于...

希望能帮到你。

Redis 不支持您正在寻找的那种访问模式。

不过,多亏了Redis模块,你可以达到同样的目的。

zeeSQL 是一个新颖的 Redis 模块,它将 SQL 数据库嵌入到 Redis 中。 zeeSQL allows to search all your data with simple and familiar SQL queries.

在您的特定用例中,我将定义两个 table,table Item 和 table Keyword.

Keyword table 上,您可以设置一个约束并将其设为集合。 Keyword 应该有一个针对 Item table 的外键并且在元组 (ItemID, keyword)

上是唯一的

此时您可以填充 table,并使用 SQL 语法在其中查找项目,同时保持 Redis 的性能,zeeSQL 在内存中工作.

zee的另一个选择SQL,就是把你的数据作为散列元素存储在Redis中,并使用zeeSQL secondary indexes.

通过这种方式,您的数据既驻留在 Redis 中以实现快速访问,又驻留在 zeeSQL 中以实现可搜索性。 在 zeeSQL 二级索引上可以定义 SQL 索引来使你的查询更快。