也许使用separateRedis 数据结构(尽管相同的数据库)用于跟踪用户活动
和用户位置。
例如,使用以下命令单独跟踪当前在线的用户Redis 集:
[我的代码片段是使用 redis-python 绑定的 python 代码,并改编自示例应用程序 http://flask.pocoo.org/snippets/71/在 Flask(python 微框架)中;示例应用程序和框架均由 Armin Ronacher 编写。]
from redis import Redis as redis
from time import time
r1 = redis(db=1)
当调用下面的函数时,它会根据当前 UNIX 时间(以分钟为单位)创建一个密钥
然后将用户添加到具有该密钥的集合中。我想你会想要
将到期时间设置为 10 分钟,这样在任何给定时间,您都有 10 个活跃密钥
(每分钟一个)。
def record_online(player_id):
current_time = int(time.time())
expires = now + 600 # 10 minutes TTL
k1 = "playersOnline:{0}".format(now//60)
r1.sadd(k1, player_id)
r1.expire(k1, expires)
所以为了让所有活跃用户union所有活动键(在本例中为 10
键,纯粹任意的数字),如下所示:
def active_users(listOfKeys):
return r1.sunion(listOfKeys)
这解决了由于 TTL 而导致的“清理”问题——非活动用户不会出现在您的实时密钥中,因为它们不断循环——即,活动用户中仅键入旧时间戳,而旧时间戳在本例中不会持续存在(但也许在过期之前由 Redis 写入永久存储)。无论如何,这都会从活动的 redis 数据库中清除不活动的用户。