Можно ли после перезагрузки вернуть курсор из redis SCAN?

Я дважды сканирую около 30 тыс. Ключей redis, соответствующих шаблону (30 тыс. Х 30 тыс.), Используя redis-py. Интересующие ключи занимают около 10% пространства ключей.

cursor_1, data_chunk1 = redisDB.scan(cursor=0, match="xp:[^0]*") 
    …
    for data_chunk2 in redisDB.scan_iter(match="xp:[^0]*", count=100):
        … some long calculation

Для завершения потребуется около 1 недели, поэтому я отслеживаю возвращаемые курсоры, чтобы можно было остановить и продолжить циклы. Когда курсор =0, вывод выглядит так

Progress cursor_1= 28672 : result_28672 
Progress cursor_1= 117248 : result_117248A
Progress cursor_1= 117248 : result_117248B
Progress cursor_1= 117248 : result_117248C
Progress cursor_1= 67072 : result_67072
Progress cursor_1= 28160 :  result_28160 #<---
Progress cursor_1= 69888 :  result_69888A
Progress cursor_1= 69888 :  result_69888B
Progress cursor_1= 84224 :  result_84224

Если я остановлюсь здесь и перезапущу цикл с курсором =28160, то результат всегда будет начинаться с

Progress cursor_1= 69888 :  result_69888A
Progress cursor_1= 69888 :  result_69888B
Progress cursor_1= 84224 :  result_84224
...

Пока все хорошо, но все потеряно, когда мне нужно выключать компьютер каждую ночь (и позволить Redis повторно заполнить мои данные на следующий день). Перезапуск с курсором = 28160 вернет другой набор cursor_1s. Так что мои вопросы...

Q1: Будет ли SCAN возвращаться в область поиска, которая уже была найдена до перезагрузки? Небольшое количество дубликатов не будет иметь для меня значения, но повторное сканирование заново побеждает цель отслеживания курсора (ов) для сохранения прогресса.

Q2: Если я позволю ему работать непрерывно, пока курсор_1 не вернется к 0, будет ли гарантия, что все ключи, соответствующие шаблону, были исчерпаны, когда я объединил все результаты до и после перезагрузки?

0 ответов

Другие вопросы по тегам