Stěžejní je schopnost úložiště nalézt nejbližšího následníka podle lexikografického uspořádání. Taková implementace je optimální (lépe to nejde) a typicky se používá něco jak B+ strom, aby vyhledání bylo vždy O(log n).
https://redis.io/commands/scan
"Time complexity: O(1) for every call."
Prave ste poukazali na fakt, ze Redis drzi kluce v hash tabulke a nie v B+strome. Preto si rad pozriem ako vam 
SCAN bude vracat "
nejbližšího následníka podle lexikografického uspořádání".
Vasu argumentaciu ste mohli postavit aj na prikaze 
ZSCAN, ale ani to by vam nepomohlo, kedze implementacia v Redise pouziva 
skip listy a INSERT a REMOVE su spoplatnene komplexitou 
O(log n). Predpokladam, ze pre search kluca pre zaciatok iteracie pouzije hash. 
Nehovoriac o tom, ze Redis je in-memory store. Co v pripade, ak mate tolko klucov, ze sa vam cela hash tabulka (+ dalsie podporne struktury v pripade Sorted sets) a hodnoty 
nevojdu do pamate?