首页 > 解决方案 > key过期时触发操作[redis]

问题描述

我目前正在使用 MongoDB,唯一阻止我迁移到 Redis 的是我们数据库架构中的一个部分。我们不需要持久化数据,而且数据来来去去非常快,所以它非常适合 Redis。

我有userssessions。当用户加入我们的套接字时,我们会创建一个类似的条目,除非用户使用我们的 websocket,否则我们user:uid会在 2 分钟内过期,在这种情况下,我们会将过期日期再升级 2 分钟。ping pong

用户可以加入会话,当他们这样做时,我们会将他们的数据添加到sessions-users:sid(列表)之类的条目中。这很好用,当用户离开会话时,我们只是删除它,我们还添加到期日期并在必要时更新它。

问题是:我需要计算所有会话的用户数量,所以我会创建一个类似sessions-count或类似的哈希值,并hgetall用于检索每个会话的用户数,因为没有这样的东西多层哈希(哈希中的哈希),我必须有两个单独的哈希来计算用户存储用户信息(参见下面的表示):

session-users列表和sessions-count哈希也是如此。我的问题是:如何保持会话计数和会话用户同步,或者如何将此布局重新排列为其他有效的布局?

基本上,如果我的服务器无法让它们保持同步,它会变得混乱,所以我在想是否有可能trigger在用户过期时sessions-count自动减少。这也不是最好的方法,因为如果触发器失败,计数也会变得混乱,所以我想知道是否有更好的方法来创建这个布局。

我有N个用户连接到N个会话,我必须能够检索会话中的所有用户,计算单个会话中的用户数量,并且还可以计算所有会话中的用户数量(sessionId 和计数的数组),而无需执行多个查询。

标签: redis

解决方案


推荐阅读