database - 多组信息的redis架构

标签 database nosql redis

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

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

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

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

其他选择?

我主要关心性能。我想对 session 、状态、颜色执行查询,以便尽可能高效(假设超过 500 万用户)。

最佳答案

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

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

对于用户状态,这意味着如果一个用户不在线,他们就处于离线状态,所以我会花时间和空间保留两套,只存储哪些用户在线。根据我的经验,redis 的速度足以将其作为一个集合来处理,但另一种选择是使用 redis bitmaps来处理这些数据。请参阅博文 Chandra Patni了解详情。

关于database - 多组信息的redis架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11271069/

相关文章:

python - mysql数据库优先级顺序

mysql - 数据库模式知识边界

Redis 自己清除数据..!

transactions - 使用 CouchDB 对两个文档进行类似事务的更新

使用 connect-redis 和 Unix 域套接字的 Node.js Express session

node.js - 在 node.js 中,socket.io 使用 redis - 这个 redis 是否可用于正常的 redis 使用?

database - CouchDB和Lotus Notes有什么区别?

c# - 使用 NHibernate 编写单元测试的最佳实践

mongodb - mongodb 在 CAP 定理中处于什么位置?

cap - StarCounter和CAP