Als je snelheid wilt, moet je zoveel mogelijk voorbereiden bij het opslaan van de structuur of 'cache' in redis.Als je de producten opslaat in een HSET
, en voeg de categorietellers toe (één per categorie) naast uw 'productgegevens'-lid in deze HSET
, kunt u HINCRBY
. gebruiken om de tellers te verhogen/verlagen.
In het algemeen (een Redis-cache ontwerpen voor uw behoeften):u moet proberen te voorkomen dat u gegevens ophaalt die u niet nodig hebt.
Ik raad aan om een Lua-script te gebruiken voor het opslaan (/bijwerken/verwijderen) en het ophalen van uw geaggregeerde rapport. Lua-scripts worden uitgevoerd op de Redis-server. ServiceStack ondersteunt ze (SCRIPT LOAD
+ EVALSHA
of gewoon EVAL
), en je zou ook de BookSleeve C#-clientmodule kunnen proberen (die we gebruiken en een beetje sneller is. 'faster' :goed redis-data-ontwerp staat natuurlijk voorop). De BookSleeve C#-client richt zich op multithreaded redis-pipelining, wat waarschijnlijk is wat je wilt als je te maken hebt met grote datasets. Pipelining moet ook mogelijk zijn met ServiceStack.
Als de categorieën en producten een geheel getal ID hebben, kun je dit ook combineren met een ZSET
, waar u de ID als scoreveld kunt gebruiken. Met een ZRANGEBYSCORE
je kunt het 'record' direct krijgen. Deze techniek is veilig zolang je ID's 15 cijfers of minder gebruiken en het decimale deel van de 'score' niet gebruiken. De ID moet dus binnen het bereik van -999999999999999 tot 999999999999999 blijven. Opmerking:deze limieten bestaan omdat de Redis-server de score (float) intern opslaat als een redis-string-representatie.
Ik hoop dat dit helpt, TW