Целью безопасных / небезопасных итераторов является четкое определение того, происходит ли итерация в изменяемой или неизменной структуре данных.В реализации dict он предотвращает выполнение некоторых операций (например, перефразирование) со словарем, когда происходит безопасная итерация.
Теперь у безопасных итераторов есть обратная сторона: они должны увеличивать счетчик ссылок всам итеративный объект, так что объект знает, происходит ли безопасная итерация или нет.
Redis использует механизм копирования-записи-записи ОС (COW) для обработки фонового дампа.Когда происходит дамп, вызывается fork для клонирования экземпляра Redis и создания второго процесса.Этот процесс будет перебирать все данные, чтобы сериализовать все в файл дампа.Благодаря механизму COW большинство страниц совместно используются двумя процессами, поэтому Redis не занимает вдвое больше оперативной памяти при сбрасывании данных.
Теперь страницы доступны только в том случае, если они доступны только для чтения.Режим.Когда один из двух процессов записывает что-то в память, соответствующая страница автоматически дублируется ОС.
Если для итераций по всем словарям систематически использовался безопасный итератор, большое количество страниц дублировалось бы (из-заобновления счетчика ссылок).В клонированном процессе данные считаются неизменными, поэтому использование небезопасного итератора имеет смысл уменьшить активность COW.Это особенно актуально, когда в Redis много объектов set / hash / zset.