Du bør være ligeglad med den aktuelle kommandoudførelse, men om indvirkningen på alle andre kommandoer, eftersom Redis behandler kommandoer ved hjælp af en enkelt tråd (dvs. mens en kommando udføres, skal alle andre vente, indtil den ene udføres).
Mens keys
eller scan
kan give dig lignende eller identisk ydeevne udført alene i dit tilfælde, vil nogle millisekunder, der blokerer Redis, reducere den samlede I/O betydeligt.
Dette er hovedårsagen til at bruge keys
til udviklingsformål og scan
på produktionsmiljøer.
OP sagde:
"Mens nøgler eller scanning kan give dig lignende eller identisk ydeevne, der udføres alene i dit tilfælde, vil nogle millisekunder, der blokerer Redis, reducere den samlede I/O betydeligt." - Denne sætning ser ud til at indikere, at den ene kommando blokerer Redis, og den anden gør det ikke, hvilket ikke kan være tilfældet. Hvis jeg er garanteret 100 resultater fra mit opkald til KEYS, på hvilken måde er det værre end SCAN? Hvorfor føler du, at en kommando er mere tilbøjelig til at blokere?
Der burde være en god forskel, når du kan paginere søgningen. Det er ikke det samme at blive tvunget til at få 100 nøgler i en enkelt omgang end at kunne implementere paginering og få 100 nøgler, 10 gange 10 (eller 50 og 50). Denne meget lille afbrydelse kan lade andre kommandoer sendt af applikationslaget blive behandlet af Redis . Se, hvad Redis officielle dokumentation siger om dette:
Da disse kommandoer giver mulighed for trinvis iteration og kun returnerer et lille antal elementer pr. opkald, kan de bruges i produktionen uden ulemperne ved kommandoer som NØGLER eller SMEMBERS, der kan blokere serveren i lang tid (selv flere sekunder), når de kaldes mod store samlinger af nøgler eller elementer
.