在 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
对象:
- 每个
Item
实例应该有一个唯一的键。
- 将
Item
实例编码为字符串。例如:JSON 字符串。
- 使用唯一键和编码字符串值在 redis 中保存
Item
个实例。
- 对于价格范围搜索:
- 使用
ZADD
,使用键保存到排序集:PRICE_RANGE
得分:Item price value
成员:Item unique key
.
- 使用
ZRANGEBYSCORE
获取价格范围内的会员。
- 迭代成员(项目的唯一键)以获取所有项目
- 解码所有项目
- 对于时间戳范围查询...
- 对于...
希望能帮到你。
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 索引来使你的查询更快。
如何在 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
对象:
- 每个
Item
实例应该有一个唯一的键。 - 将
Item
实例编码为字符串。例如:JSON 字符串。 - 使用唯一键和编码字符串值在 redis 中保存
Item
个实例。
- 对于价格范围搜索:
- 使用
ZADD
,使用键保存到排序集:PRICE_RANGE
得分:Item price value
成员:Item unique key
. - 使用
ZRANGEBYSCORE
获取价格范围内的会员。 - 迭代成员(项目的唯一键)以获取所有项目
- 解码所有项目
- 对于时间戳范围查询...
- 对于...
希望能帮到你。
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 索引来使你的查询更快。