Memang! Itu karena SCAN bekerja seperti itu, mengutip dari dokumentasi Redis:
Namun sementara memblokir perintah seperti SMEMBERS mampu menyediakan semua elemen yang merupakan bagian dari Set pada saat tertentu, Kelompok perintah SCAN hanya menawarkan jaminan terbatas tentang elemen yang dikembalikan karena koleksi yang kita iterasi secara bertahap dapat berubah selama proses iterasi.
Namun karena SCAN memiliki sangat sedikit status yang terkait (hanya kursor), maka SCAN memiliki kelemahan sebagai berikut:Elemen tertentu dapat dikembalikan beberapa kali. Terserah aplikasi untuk menangani kasus elemen duplikat , misalnya hanya menggunakan elemen yang dikembalikan untuk melakukan operasi yang aman saat diterapkan kembali beberapa kali.
Jadi, Anda mungkin ingin menggunakan ingin menggunakan array_unique($keys) setelah foreach
.
Untuk memahami mengapa iterasi bekerja seperti itu, hal terbaik adalah membaca bagian dari dokumentasi Redis ini .