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