Se vuoi velocità, dovresti prepararti il più possibile quando memorizzi la struttura o 'cache' in redis.Se memorizzi i prodotti in un HSET
e aggiungi i contatori di categoria (uno per categoria) insieme al membro "dati di prodotto" in questo HSET
, puoi usare HINCRBY
per incrementare/decrementare i contatori.
In generale (progettando una cache Redis per le tue esigenze):dovresti cercare di impedire il recupero di dati che non ti servono.
Raccomando di utilizzare uno script Lua per archiviare (/aggiornare/eliminare) e recuperare il rapporto aggregato. Gli script Lua vengono eseguiti sul server Redis. ServiceStack li supporta (SCRIPT LOAD
+ EVALSHA
o semplicemente EVAL
), e potresti anche provare il modulo client BookSleeve C# (che usiamo ed è un po' più veloce. 'più veloce' :una buona progettazione dei dati redis viene prima, ovviamente). La pipeline dovrebbe essere possibile anche con ServiceStack.
Se le categorie e i prodotti hanno un ID intero, puoi anche combinarlo con un ZSET
, dove puoi utilizzare l'ID come campo del punteggio. Con un ZRANGEBYSCORE
puoi ottenere direttamente il "record". Questa tecnica è sicura purché i tuoi ID utilizzino 15 cifre o meno e non utilizzino la parte decimale del "punteggio". Quindi l'ID deve rimanere nell'intervallo da -999999999999999 a 9999999999999999. Nota:questi limiti esistono perché il server Redis memorizza effettivamente il punteggio (float) come rappresentazione di una stringa redis internamente.
Spero che questo aiuti, TW