Du bör inte bry dig om den nuvarande kommandoexekveringen utan om påverkan på alla andra kommandon, eftersom Redis bearbetar kommandon med en enda tråd (dvs medan ett kommando körs måste alla andra vänta tills det ena avslutas).
Medan keys
eller scan
kan ge dig liknande eller identisk prestanda som körs ensam i ditt fall, några millisekunder som blockerar Redis kommer att minska den totala I/O avsevärt.
Detta är den främsta anledningen till att använda keys
för utvecklingsändamål och scan
på produktionsmiljöer.
OP sa:
"Medan nycklar eller skanning kan ge dig liknande eller identisk prestanda som körs ensam i ditt fall, kommer några millisekunder som blockerar Redis att minska den totala I/O avsevärt." - Den här meningen verkar indikera att det ena kommandot blockerar Redis och det andra inte, vilket inte kan vara fallet. Om jag är garanterad 100 resultat från mitt samtal till KEYS, på vilket sätt är det värre än SCAN? Varför känner du att ett kommando är mer benäget att blockera?
Det borde vara en bra skillnad när du kan paginera sökningen. Det är inte samma sak att tvingas få 100 nycklar i ett enda pass som att kunna implementera paginering och få 100 nycklar, 10 gånger 10 (eller 50 och 50). Detta mycket lilla avbrott kan låta andra kommandon som skickas av applikationslagret bearbetas av Redis . Se vad Redis officiella dokumentation säger om detta:
Eftersom dessa kommandon tillåter inkrementell iteration och endast returnerar ett fåtal element per anrop, kan de användas i produktionen utan nackdelen med kommandon som KEYS eller SMEMBERS som kan blockera servern under lång tid (även flera sekunder) när de anropas mot stora samlingar av nycklar eller element
.