0

我正在使用 Mongodb 来存储用户的数据,包括用户状态(在线|离线|忙碌)。到期时间只有几秒钟。如果几秒钟后用户没有出现(发送保持连接请求),我想将状态设置为离线。

我正在为此寻找可扩展的解决方案。我正在考虑添加“lastseen”属性并运行 cron 作业来更新状态,但我认为它不可扩展。

有一个更好的方法吗?我如何使用 Redis 或 Memcashed 来帮助我解决这个问题?

4

1 回答 1

1

您可以使用 TTL 集合。http://docs.mongodb.org/manual/tutorial/expire-data/

一种可行的技术是拥有一个带有 last_seen 时间戳的会话集合。TTL 集合将配置为在 last_seen 时间戳超过 X 秒之前删除会话。只要会话在线,您就会定期刷新 last_seen 时间戳以防止它被清理。

例子:

  1. 设置 TTL 集合:

    db.sessions.ensureIndex( { last_seen:1 },{ expireAfterSeconds: 60 } );

  2. ping 以保持会话处于活动状态(或者如果它不存在则创建它)

    db.sessions.update( {_id: , last_seen: }, { upsert:true } );

  3. 查询用户是否在线:

    会话 = db.sessions.find( { _id: } )

    • 如果返回一个文档,则用户在线
    • 如果没有文档返回,则它们处于脱机状态
于 2013-02-06T13:56:46.863 回答