Можно ли после перезагрузки вернуть курсор из 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, будет ли гарантия, что все ключи, соответствующие шаблону, были исчерпаны, когда я объединил все результаты до и после перезагрузки?