Это не очень удобно использовать для 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
таким образом, вы получите точное количество соответствующего использования rs каждый раз, когда вы делаете ZCOUNT
, и каждая операция, которую вы делаете, является относительно дешевой O (log (n)).
И, наконец, если вы хотите, чтобы пользователи из отсортированного набора были удалены/уволены из сортированного набора, вы можете сделать это как довольно дешевое пакетное задание с ZREMRANGEBYRANK в любой промежуток времени, который вам нравится.
Если это глобальная лицензия, тогда как ['DBSIZE'] (http://redis.io/commands/dbsize), так и [' INFO'] (http://redis.io/commands/info) keypace может сказать вам это. –