Подтвердить что ты не робот

Поиск ключей без истечения срока действия в Redis

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Итак, это было бы

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

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

Ответ 3

#!/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

Ответ 4

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

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

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

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