Database Redis高效地创建密钥

Database Redis高效地创建密钥,database,optimization,redis,high-availability,nosql,Database,Optimization,Redis,High Availability,Nosql,我正在尝试在redis中存储一些数据 考虑下面的例子 一个人在不同的年份拥有不同的汽车 目前我正在存储这样的密钥- cars:johndoe:1991:mercedes model s1 engine v1 cars:johndoe:1992:mercedes model s1 engine v1 cars:jane:1992:BMW model s2 engine v2 cars:foobar:1991:honda model s3 engine v3 这样做的好处是-我可以使用带有密钥的通

我正在尝试在redis中存储一些数据

考虑下面的例子

一个人在不同的年份拥有不同的汽车

目前我正在存储这样的密钥-

cars:johndoe:1991:mercedes model s1 engine v1
cars:johndoe:1992:mercedes model s1 engine v1
cars:jane:1992:BMW model s2 engine v2
cars:foobar:1991:honda model s3 engine v3
这样做的好处是-我可以使用带有密钥的通配符来获取不同的数据。 e、 g

等等

但根据redis文档,
keys
带有通配符的命令并不高效,因为它会搜索所有键。
所以我决定用集合来表示这些数据。 但要达到上述相同的结果,我需要许多不同类型的集合,例如

1. sadd cars cars:johndoe:1991:mercedes cars:johndoe:1992:mercedes cars:jane:1992:BMW cars:foobar:1991:honda
2. sadd cars:johndoe cars:johndoe:1991:mercedes cars:johndoe:1992:mercedes
3. sadd cars:jane cars:jane:1992:BMW 
4. sadd cars:foobar cars:foobar:1991:honda
5. sadd cars:1991 cars cars:johndoe:1991:mercedes  cars:foobar:1991:honda
这样,我需要为单个操作添加和删除多个键

这是唯一的办法吗?请告诉我是否有更有效的解决方法


提前谢谢

在第一种方法中,您可以使用

您可以编写一个简单的lua脚本,甚至在应用程序逻辑中,您可以使用光标点迭代scan命令,获得与给定模式匹配的所有键

依我看,如果你有很多标准要处理,那么第一种选择将是最合适的

  • 您可以避免击中多个SADD
  • 根据任何条件检索
  • 如果您的标准数量较少,则第二个选项最适合

  • 不需要使用scan命令进行迭代,您将拥有查找ready的键

  • 希望这有帮助

    在第一种方法中,您可以使用

    您可以编写一个简单的lua脚本,甚至在应用程序逻辑中,您可以使用光标点迭代scan命令,获得与给定模式匹配的所有键

    依我看,如果你有很多标准要处理,那么第一种选择将是最合适的

  • 您可以避免击中多个SADD
  • 根据任何条件检索
  • 如果您的标准数量较少,则第二个选项最适合

  • 不需要使用scan命令进行迭代,您将拥有查找ready的键

  • 希望这有帮助

    事实上,这是仅有的两种方法——不仅适用于Redis,也适用于任何数据库。这是一个经典的时空权衡:要么使用RAM付费(即存储多个索引[集]),以加快搜索速度,要么使用CPU(即进行临时扫描)


    Redis的理念是使用空间,因为我们的目标是实现性能最大化。这意味着您希望以需要的方式存储数据。因为在您的案例中,您对使用不同维度读取数据感兴趣,所以需要对这些维度中的每个维度进行适当的索引。对于这种类型的索引,Redis的集合是一个很好的选择,不包括“make year”数据,它可以受益于在排序集合中进行索引,以方便范围搜索(多年,但仅在需要时)。

    事实上,这是仅有的两种方法,不仅适用于Redis,也适用于任何数据库。这是一个经典的时空权衡:要么使用RAM付费(即存储多个索引[集]),以加快搜索速度,要么使用CPU(即进行临时扫描)


    Redis的理念是使用空间,因为我们的目标是实现性能最大化。这意味着您希望以需要的方式存储数据。因为在您的案例中,您对使用不同维度读取数据感兴趣,所以需要对这些维度中的每个维度进行适当的索引。对于这种类型的索引,Redis的集合是一个很好的选择,不包括“make year”数据,它可以受益于在排序集合中进行索引以方便范围搜索(多年,但仅在需要时)。

    对于此类操作,我将使用MongoDB。@BhushanPatil感谢您的评论。但我也在寻找功能较弱的好缓存。对于此类操作,我会使用MongoDB。@BhushanPatil谢谢您的评论。但我也在寻找功能较弱的机器的好缓存。谢谢你的回答。谢谢你的回答。我正在使用twisted,不确定它是如何运行的,我会尝试确定。你的答案投了赞成票,但由于我的声誉不高,可能无法显示。谢谢你提供的信息。我正在使用twisted,不确定,它是如何运行的,我会尝试确定。你的答案投了赞成票,但由于我的名声不好,可能无法显示。谢谢你提供的信息。
    1. sadd cars cars:johndoe:1991:mercedes cars:johndoe:1992:mercedes cars:jane:1992:BMW cars:foobar:1991:honda
    2. sadd cars:johndoe cars:johndoe:1991:mercedes cars:johndoe:1992:mercedes
    3. sadd cars:jane cars:jane:1992:BMW 
    4. sadd cars:foobar cars:foobar:1991:honda
    5. sadd cars:1991 cars cars:johndoe:1991:mercedes  cars:foobar:1991:honda