redis - key过期时触发操作[redis]
问题描述
我目前正在使用 MongoDB,唯一阻止我迁移到 Redis 的是我们数据库架构中的一个部分。我们不需要持久化数据,而且数据来来去去非常快,所以它非常适合 Redis。
我有users
和sessions
。当用户加入我们的套接字时,我们会创建一个类似的条目,除非用户使用我们的 websocket,否则我们user:uid
会在 2 分钟内过期,在这种情况下,我们会将过期日期再升级 2 分钟。ping pong
用户可以加入会话,当他们这样做时,我们会将他们的数据添加到sessions-users:sid
(列表)之类的条目中。这很好用,当用户离开会话时,我们只是删除它,我们还添加到期日期并在必要时更新它。
问题是:我需要计算所有会话的用户数量,所以我会创建一个类似sessions-count
或类似的哈希值,并hgetall
用于检索每个会话的用户数,因为没有这样的东西多层哈希(哈希中的哈希),我必须有两个单独的哈希来计算用户并存储用户信息(参见下面的表示):
sessions-users:1234
= [User A
,User B
,User C
]sessions-users:1235
= [User D
,User E
,User F
]sessions-users:1236
= [User G
,User H
]sessions-count
1234
= 31235
= 31236
= 2
session-users
列表和sessions-count
哈希也是如此。我的问题是:如何保持会话计数和会话用户同步,或者如何将此布局重新排列为其他有效的布局?
基本上,如果我的服务器无法让它们保持同步,它会变得混乱,所以我在想是否有可能trigger
在用户过期时sessions-count
自动减少。这也不是最好的方法,因为如果触发器失败,计数也会变得混乱,所以我想知道是否有更好的方法来创建这个布局。
我有N个用户连接到N个会话,我必须能够检索会话中的所有用户,计算单个会话中的用户数量,并且还可以计算所有会话中的用户数量(sessionId 和计数的数组),而无需执行多个查询。
解决方案
推荐阅读
- multithreading - 如何多线程合并排序中的合并操作?
- html - 如何处理 VBA Selenium 上的隐藏元素
- javascript - 在形状 JointJS 附近创建关闭按钮
- python - 如何访问 Kivy 中的父小部件元素?
- html - Firefox 以不同的方式呈现页面,具体取决于样式是由 style 属性还是 .css 文件传递
- python-3.x - 根据表中的标准复制数据框中的行
- javascript - 从 Mongo 获取多个查询
- azure - 为 Azure 部署忽略 Git 中的项目
- python - 如何在 keras 生成器中使用 numpy memmap 不超过 RAM 内存?
- c++ - 调用函数后,我的 char 数组的大小自动缩小到 1