我目前有一个数据集,类似于:
通道 1 = 用户 1、用户 2、用户 3
频道 2 = 用户 4、用户 5、用户 6
(注意-这些不是实际名称,文本不是可预测的序列)
我希望对以下内容具有最优化的功能:
1) 将用户添加到频道
2) 从频道中删除用户
3)获取几个选定频道中所有用户的列表,保持对他们所在频道的了解(以防万一——这也可以简单地检查一个频道是否有任何用户,而无需获取他们的实际列表)
4)检测特定用户是否在频道中(如有必要愿意放弃此功能)
我对一次获得多个密钥的方法只有两种方式感到有点担心:
A) 使用常规密钥和 mget key1、key2、key3
- 在这个解决方案中,每个值都是一个 JSON 字符串,然后可以在客户端对其进行操作和查询以添加/删除/确定值。这本身有几个问题 - 首先,另一个客户端可能会在处理数据时更改数据(即这个解决方案不是原子的),并且如果通道包含特定用户,即使很容易检测也不容易立即检测到检测频道是否有任何用户(这是低优先级,如上所述)
B) 使用 set 和 sunion
- 我真的很想以某种方式为此解决方案使用集合,上面的解决方案似乎是错误的......但我看不到如何一次查询多个集合并维护有关每个成员来自哪个集合或是否有任何集合的信息union 有 0 个成员(sunion 只给了我所有组合成员的最后一组)
任何可以在最佳时间和原子操作中实现上述第 1-4 点的解决方案?
编辑:在我的特定情况下可能有用的一个想法是将频道名称存储为用户名的一部分,然后使用集合。不过,获得更通用的答案会很棒