设置:想象一下在redis中存储3种类型数据的应用程序:
会议信息
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套&离线:“在线设置”中的每个在线用户,“离线设置”中的每个离线用户
b3)为每个用户创建一个“颜色集”:在每个集合中,存储3个最喜欢的颜色。
C。使用不同的键存储会话,并使用列表显示状态/喜欢的颜色?
c1)将每个会话存储为:key =“session id”,value =“session information”,
c2)在线创建2个列表&离线:“在线列表”中的每个在线用户,“离线列表”中的每个离线用户
c3)为每个用户创建一个“颜色列表”:在每个列表中,存储3种最喜欢的颜色。
d。其他选择?
我主要关注的是表现。我想对会话,状态,颜色进行查询,以便尽可能高效(假设有5百万+用户)。
答案 0 :(得分:0)
我会为会话做字符串。它们很简单,您可以将它们设置为过期(SETEX
)。
至于颜色会导致一组内存开销,所以我只将所有三种颜色存储为1个字符串值,使用JSON或MessagePack序列化(例如{{1} }})。
对于用户状态,它暗示如果用户不在线,则他们处于离线状态,因此我会保留两组时间和空间,只存储哪些用户在线。根据我的经验,redis足够快,可以将其作为一个集处理,但另一个选项是使用redis bitmaps来处理这些数据。有关详细信息,请参阅博文Chandra Patni。