我正在使用 Mongodb 来存储用户的数据,包括用户状态(在线|离线|忙碌)。到期时间只有几秒钟。如果几秒钟后用户没有出现(发送保持连接请求),我想将状态设置为离线。
我正在为此寻找可扩展的解决方案。我正在考虑添加“lastseen”属性并运行 cron 作业来更新状态,但我认为它不可扩展。
有一个更好的方法吗?我如何使用 Redis 或 Memcashed 来帮助我解决这个问题?
我正在使用 Mongodb 来存储用户的数据,包括用户状态(在线|离线|忙碌)。到期时间只有几秒钟。如果几秒钟后用户没有出现(发送保持连接请求),我想将状态设置为离线。
我正在为此寻找可扩展的解决方案。我正在考虑添加“lastseen”属性并运行 cron 作业来更新状态,但我认为它不可扩展。
有一个更好的方法吗?我如何使用 Redis 或 Memcashed 来帮助我解决这个问题?
您可以使用 TTL 集合。http://docs.mongodb.org/manual/tutorial/expire-data/
一种可行的技术是拥有一个带有 last_seen 时间戳的会话集合。TTL 集合将配置为在 last_seen 时间戳超过 X 秒之前删除会话。只要会话在线,您就会定期刷新 last_seen 时间戳以防止它被清理。
例子:
设置 TTL 集合:
db.sessions.ensureIndex( { last_seen:1 },{ expireAfterSeconds: 60 } );
ping 以保持会话处于活动状态(或者如果它不存在则创建它)
db.sessions.update( {_id: , last_seen: }, { upsert:true } );
查询用户是否在线:
会话 = db.sessions.find( { _id: } )