【问题标题】:get set members value in REDIS在 REDIS 中获取设置的成员值
【发布时间】:2020-06-06 20:42:30
【问题描述】:

假设我有 3 个用户。我将这 3 个用户存储在 redis 中 -

SET user1 " 'name': 'a', 'age' : 1 "
SET user2 " 'name': 'b', 'age' : 2 "
SET user3 " 'name': 'c', 'age' : 3 "
  • user1user2 是名为 group1 的组的成员
  • user2user3group2 的组成员

如果我使用SMEMBERS family,那么我将只获得成员列表

SMEMBERS group1

1) "user1"
2) "user2"

但我想要这些键的值。我可以使用hash family,但如果我使用哈希,我将无法访问user1,而无需提及它的组名。我的意思是,如果我想要user1 的值,我必须写hget group1 user1,但并不总是可以知道组名。

我真正想要的更像是MGETSMEMBERS 的混音器

GET user1

1) " 'name': 'a', 'age' : 1 "

GET group1

1) " 'name': 'b', 'age' : 2 "
2) " 'name': 'c', 'age' : 3 "

有什么办法吗

【问题讨论】:

    标签: redis


    【解决方案1】:

    没有一种内置的数据结构可以解决你在 redis 中的问题。它不像 RDBM 那样将数据放入一个表并查询不同的列。您需要维护多个键来实现您的不同查询。您可以同时使用hash/set 来跟踪用户和组。另一种选择是hash/hash

    • hash/set 版本(sets 提供组的唯一性)
    127.0.0.1:6379> hset user:1 name 'a' age 1
    (integer) 2
    127.0.0.1:6379> hset user:2 name 'b' age 2
    (integer) 2
    127.0.0.1:6379> hset user:3 name 'c' age 3
    (integer) 2
    127.0.0.1:6379> hgetall user:2
    1) "name"
    2) "b"
    3) "age"
    4) "2"
    127.0.0.1:6379> sadd group1 user:1 user:2
    (integer) 2
    127.0.0.1:6379> smembers group1
    1) "user:1"
    2) "user:2"
    127.0.0.1:6379>
    
    • hash/hash 版本(hash fields 提供组的唯一性)
    127.0.0.1:6379> hset user:1 name 'a' age 1
    (integer) 2
    127.0.0.1:6379> hset user:2 name 'b' age 2
    (integer) 2
    127.0.0.1:6379> hset user:3 name 'c' age 3
    (integer) 2
    127.0.0.1:6379> hset group1 user:1 1 user:2 1
    (integer) 2
    127.0.0.1:6379> hkeys group1
    1) "user:1"
    2) "user:2"
    127.0.0.1:6379>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 2012-06-10
      • 2012-10-07
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多