【问题标题】:redis architecture for multiple groups of information多组信息的redis架构
【发布时间】:2012-06-30 02:58:30
【问题描述】:

设置:想象一个在 redis 中存储 3 类数据的应用程序:
1. 会话信息
2. 用户状态(在线/离线)
3. 用户 3 种最喜欢的颜色

我想问一下设置它的正确架构。我应该:
一种。仅使用不同的密钥存储所有内容?即:
a1) 将每个会话存储为:key = "session id", value = "session information",
a2) 将每个状态存储为:key = "user id", value = "online || offline",
a3) 将每种喜欢的颜色存储为:key = "user color1 || user color2 || user color3", value = "color name"

湾。使用不同的键存储会话,并使用状态/最喜欢的颜色集?即:
b1) 将每个会话存储为:key = "session id", value = "session information",
b2)在线和离线创建2组:“set online”中的每个在线用户,“set offline”中的每个离线用户
b3) 为每个用户创建一个“颜色组”:在每个组中,存储 3 种最喜欢的颜色。

C。使用不同的键存储会话,并使用状态/喜欢的颜色列表?
c1) 存储每个会话:key = "session id", value = "session information",
c2) 创建 2 个在线和离线列表:“在线列表”中的每个在线用户,“离线列表”中的每个离线用户
c3) 为每个用户创建一个“颜色列表”:在每个列表中,存储 3 种最喜欢的颜色。

d。其他选择?

我主要关心性能。我想对会话、状态、颜色进行查询,以尽可能提高效率(假设有 500 万+用户)。

【问题讨论】:

    标签: database nosql redis


    【解决方案1】:

    我会为会话做字符串。它们很简单,您可以将它们设置为过期 (SETEX)。

    至于颜色,你会为一个集合产生内存开销,所以我只会将所有三种颜色存储为 1 个字符串值,用JSONMessagePack 序列化(例如SET colors:<user_id> '["red", "blue", "green"]')。

    对于用户状态,它暗示如果一个用户不在线,他们就离线,所以我会在时间和空间上保持两组,只存储哪些用户在线。根据我的经验,redis 的速度足以将其作为一个集合来处理,但另一种选择是使用redis bitmaps 来处理这些数据。详情见博文Chandra Patni

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2021-12-12
      相关资源
      最近更新 更多