Inderdaad! Dat komt omdat SCAN op die manier werkt, met een citaat uit Redis-documentatie:
Hoewel blokkeringscommando's zoals SMEMBERS alle elementen kunnen bieden die op een bepaald moment deel uitmaken van een Set, De SCAN-familie van commando's biedt slechts beperkte garanties over de geretourneerde elementen, aangezien de verzameling die we stapsgewijs herhalen, tijdens het iteratieproces kan veranderen.
Omdat SCAN echter heel weinig status heeft (alleen de cursor), heeft het de volgende nadelen:Een bepaald element kan meerdere keren worden geretourneerd. Het is aan de applicatie om het geval van dubbele elementen af te handelen , bijvoorbeeld alleen de geretourneerde elementen gebruiken om bewerkingen uit te voeren die veilig zijn wanneer ze meerdere keren opnieuw worden toegepast.
Dus misschien wil je gebruik willen maken van array_unique($keys) na de foreach
.
Om te begrijpen waarom de iteratie zo werkt, kunt u het beste dit deel van de Redis-documentatie lezen. .