Поиск не истекающих ключей в Redis - PullRequest
25 голосов
/ 22 марта 2012

В моей настройке команда info показывает мне следующее:

[keys] => 1128
[expires] => 1125

Я бы хотел найти эти 3 ключа без срока годности. Я уже проверил документы безрезультатно. Есть идеи?

Ответы [ 4 ]

52 голосов
/ 22 марта 2012

Изменено с сайта, который я не могу найти сейчас.

redis-cli keys  "*" | while read LINE ; do TTL=`redis-cli ttl "$LINE"`; if [ $TTL -eq  -1 ]; then echo "$LINE"; fi; done;

edit: Обратите внимание, это блокирующий вызов.

3 голосов
/ 23 мая 2019

Ответ Уэйна Лю выполняется, но используется команда Redis KEYS, которая Redis предупреждает о :

Предупреждение: рассматривайте KEYS как команду, которая должна использоваться только в производственных средах с экстремальнымиуход.Это может привести к снижению производительности при работе с большими базами данных.

Документация Redis рекомендует использовать SCAN.

redis-cli --scan | while read LINE ; do TTL=`redis-cli ttl "$LINE"`; if [ $TTL -eq  -1 ]; then echo "$LINE"; fi; done;

Если вы хотите сканировать конкретную комбинацию клавиш, используйте:

 redis-cli --scan --pattern "something*"
2 голосов
/ 25 ноября 2016

В случае, если кто-то получает неправильные аргументы или ошибочное количество аргументов, ставьте двойные кавычки вокруг $ LINE.

Итак, это будет

redis-cli keys  "*" | while read LINE ; do TTL=`redis-cli ttl "$LINE"`; if [ $TTL -eq  -1 ]; then echo "$LINE"; fi; done;

Это происходит, когда в ключе есть пробелы.

0 голосов
/ 26 февраля 2019
#!/usr/bin/env python

import argparse
import redis

p = argparse.ArgumentParser()
p.add_argument("-i", '--host', type=str, default="127.0.0.1", help="redis host", required=False)
p.add_argument("-p", '--port', type=int, default=6379, help="redis port", required=False)
p.add_argument("-n", '--db', type=int, default=0, help="redis database", required=False)

args = p.parse_args()

r = redis.Redis(host=args.host, port=args.port, db=args.db)

try:
    keys = r.keys()

    for key in keys:
        if r.ttl(key) < 0:
            print(key)
except KeyboardInterrupt:
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...