0

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

我想问一下正确的架构来设置它。我应该
:仅使用不同的密钥存储所有内容?即:
a1)将每个会话存储为:key =“会话ID”,值=“会话信息”,
a2)将每个状态存储为:key =“用户ID”,值=“在线||离线”,
a3)存储每个最喜欢的颜色:key = "user color1 || user color2 || user color3", value = "color name"

b. 使用不同的键存储会话,并使用状态/最喜欢的颜色集?即:
b1)将每个会话存储为:key =“
b2)在线和离线创建2套:每个在线用户在'set online'中,每个离线用户在'set offline'
b3)为每个用户创建一个'color set':在每个set中,存储3种喜欢的颜色。

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

d。其他选择?

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

4

1 回答 1

0

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

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

For user status, its implied that if a user is not online, they're offline so I would waist time and space keeping two sets, just store which users are online. From my experience redis is more then fast enough to handle this as a set but another option would to use redis bitmaps to handle this data. See the blog post Chandra Patni for the details.

于 2012-07-01T05:17:30.450 回答