Session 具有并发用户许可的Redis会话

Session 具有并发用户许可的Redis会话,session,redis,Session,Redis,我想在会话中使用Redis。用户将被存储在Redis中,过期信息将在每次请求时更新。我想实现并发许可证 如何计算当前存储的密钥数 我发现有,但不应该用于生产。我还考虑了当密钥过期时的一些触发器,但再次 如何使用Redis实现并发用户许可?这对于EXPIRE或顶级Redis密钥不是很有用。如果您想在Redis中存储任何其他内容,它将打乱您的逻辑。此外,尽管您可以使用类似于DBSIZE的命令来计算键的总数。在我的印象中,Redis是这样构建的,因此顶层中键的确切数量应该不重要 对于键的精确数量很重要

我想在会话中使用Redis。用户将被存储在Redis中,过期信息将在每次请求时更新。我想实现并发许可证

如何计算当前存储的密钥数

我发现有,但不应该用于生产。我还考虑了当密钥过期时的一些触发器,但再次


如何使用Redis实现并发用户许可?

这对于
EXPIRE
或顶级Redis密钥不是很有用。如果您想在Redis中存储任何其他内容,它将打乱您的逻辑。此外,尽管您可以使用类似于
DBSIZE
的命令来计算键的总数。在我的印象中,Redis是这样构建的,因此顶层中键的确切数量应该不重要

对于键的精确数量很重要的情况,Redis有一些非常好的数据结构,您可以使用它们。在您的情况下,我建议使用一种方法,其中密钥是用户id,分数是Unix时间中的过期日期。这看起来像:

ZADD users_set 1453771862 "user1"
ZADD users_set 1453771563 "user2"
ZADD users_set 1453779999 "user3"
然后,任何时候你需要知道有多少当前用户,你只需对所有超过当前时间的过期时间进行
ZCOUNT

ZCOUNT users_set 1453771850
>>> 2
ZADD
操作是幂等的,因此您还可以轻松添加/更新用户的过期时间:

ZADD users_set 1453779999 "user2"
ZCOUNT users_set 1453771850
>>> 3
这样,每次执行
ZCOUNT
时,您都会得到相关用户的准确计数,并且您所执行的每个操作都是相对便宜的O(log(n))


最后,如果从排序集中删除/终止用户对您很重要,您可以按照自己喜欢的时间间隔以非常便宜的批处理方式来完成此操作。

如果是全局许可证,则和的键空间部分都可以告诉您这一点。