U moet zich niet druk maken om de uitvoering van de huidige opdracht, maar om de impact op alle andere opdrachten, aangezien Redis opdrachten verwerkt met een enkele thread (d.w.z. terwijl een opdracht wordt uitgevoerd, moeten alle andere wachten totdat de uitvoering ervan is beëindigd).
Terwijl keys
of scan
kan u vergelijkbare of identieke prestaties bieden die alleen in uw geval worden uitgevoerd, enkele milliseconden die Redis blokkeren, zullen de algehele I/O aanzienlijk verminderen.
Dit is de belangrijkste reden om keys
te gebruiken voor ontwikkelingsdoeleinden en scan
op productieomgevingen.
OP zei:
"Hoewel sleutels of scan u vergelijkbare of identieke prestaties kunnen bieden als ze alleen worden uitgevoerd in uw geval, zullen enkele milliseconden die Redis blokkeren de algehele I/O aanzienlijk verminderen." - Deze zin lijkt erop te wijzen dat het ene commando Redis blokkeert en het andere niet, wat niet het geval kan zijn. Als ik gegarandeerd 100 resultaten krijg van mijn oproep naar KEYS, op welke manier is het dan erger dan SCAN? Waarom denk je dat één commando meer vatbaar is voor blokkering?
Er moet een groot verschil zijn wanneer u de zoekopdracht kunt pagineren. Het is niet hetzelfde om 100 sleutels in één keer te krijgen dan om paginering te implementeren en 100 sleutels te krijgen, 10 bij 10 (of 50 en 50). Deze zeer kleine onderbreking kan ervoor zorgen dat andere opdrachten die door de applicatielaag worden verzonden, door Redis worden verwerkt . Bekijk wat de officiële documentatie van Redis hierover zegt:
Aangezien deze commando's incrementele iteratie mogelijk maken, waarbij slechts een klein aantal elementen per aanroep wordt geretourneerd, kunnen ze in productie worden gebruikt zonder de keerzijde van commando's zoals KEYS of SMEMBERS die de server voor lange tijd (zelfs enkele seconden) kunnen blokkeren wanneer ze worden aangeroepen tegen grote verzamelingen sleutels of elementen
.