【问题标题】:Lists vs. Key-Scanning列表与按键扫描
【发布时间】:2014-05-28 22:32:15
【问题描述】:

我正在使用 Redis 来存储 Java 对象。例如,我有一个类 User(FirstName, LastName),每个用户都有多个地址 Address(Street, City)。

用户以 Redis Hashes 的形式存储在数据库中:

HMSET user:0 firstname qwert lastname zuiop

由于每个地址都在逻辑上绑定到特定用户,因此它们的密钥包括用户的密钥:

HMSET user:0:addresses:0 street Teststreet city Exampletown

但是,我不确定如何提供以下功能:

  • 访问数据库中的所有用户
  • 访问属于特定用户的所有地址

基本上,我看到了两个选项:

  1. 使用集合:

    SADD user user:0
    SADD user user:1
    ...
    SMEMBERS user (to access list of users)
    ...
    SADD user:0:addresses user:0:addresses:0
    SADD user:0:addresses user:0:addresses:1
    SMEMBERS user:0:addresses (to access list)
    
  2. 使用键

    KEYS user:* (to access list of users)
    KEYS user:0:addresses:* (to access list of addresses)
    

这些方法有其他替代方法吗?
哪种方式更“Redis”?

【问题讨论】:

    标签: java redis key-value


    【解决方案1】:

    重要提示:不要在生产中使用KEYS - 它会在 Redis 遍历键空间时阻止您的应用程序的请求。

    lists 方法当然是解决它的一种方法,但我会考虑列表最终需要的空间量。或者,我会考虑使用 v2.8 的新 SCAN 命令以非阻塞方式遍历键名模式。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2018-06-04
      • 1970-01-01
      • 2014-09-19
      • 2020-06-04
      相关资源
      最近更新 更多