我想使用Redis进行会话。用户将存储在Redis中,并且将在每次请求时更新。我想实现并发许可。
如何计算当前存储的密钥数?
我发现有KEYS command但它不应该用于制作。当密钥到期时我也想到了一些触发器,但又it's not what I should rely on。
如何使用Redis实现并发用户许可?
答案 0 :(得分:1)
这对EXPIRE
或顶级Redis密钥不是很好用。如果你想在Redis中存储任何其他东西,它会搞乱你的逻辑。此外,尽管您可以使用DBSIZE
,it may be inaccurate because Redis does not actively expire items等命令计算键的总数。在我的印象中,Redis的构建使顶层中确切的键数不应该很重要。
对于确切数量的密钥很重要的情况,Redis有一些很好的数据结构可供您使用。在您的情况下,我建议使用sorted set,其中密钥是user_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))。
最后,如果从排序集中删除/过期用户对您来说很重要,那么您可以在任何您喜欢的时间间隔内以ZREMRANGEBYRANK作为非常便宜的批处理作业。