Om du vill ha snabbhet bör du förbereda dig så mycket som möjligt när du lagrar strukturen eller 'cache' i redis. Om du lagrar produkterna i en HSET
, och lägg till kategoriräknare (en per kategori) tillsammans med din "produktdata"-medlem i denna HSET
, kan du använda HINCRBY
för att öka/minska räknarna.
I allmänhet (designa en Redis-cache för dina behov):du bör försöka förhindra att du hämtar data som du inte behöver.
Jag rekommenderar att du använder ett Lua-skript för att lagra (/uppdatera/ta bort) såväl som för att hämta din samlade rapport. Lua-skript körs på Redis-servern. ServiceStack stöder dem (SCRIPT LOAD
+ EVALSHA
eller helt enkelt EVAL
), och du kan också prova BookSleeve C#-klientmodulen (som vi använder och är lite snabbare. 'snabbare' :bra redis-data-design kommer naturligtvis först). BookSleeve C#-klienten fokuserar på multithreaded redis pipelining, vilket förmodligen är vad du vill ha när du hanterar stora datamängder. Pipelining bör också vara möjlig med ServiceStack.
Om kategorierna och produkterna har ett heltals-ID kan du även kombinera detta med en ZSET
, där du kan använda ID:t som poängfält. Med en ZRANGEBYSCORE
Du kan få "posten" direkt. Den här tekniken är säker så länge som dina ID använder 15 siffror eller mindre, och använd inte decimaldelen av "poängen". Så ID:t måste stanna inom intervallet -999999999999999 till 9999999999999999. Obs:Dessa gränser finns eftersom Redis-servern faktiskt lagrar poängen (flytande) som en representation av redis-strängar internt.
Hoppas detta hjälper, TW