Jeśli chcesz szybkości, powinieneś przygotować jak najwięcej podczas przechowywania struktury lub „pamięci podręcznej” w redis. Jeśli przechowujesz produkty w HSET i dodaj liczniki kategorii (po jednym na kategorię) obok elementu „dane produktu” w tym HSET , możesz użyć HINCRBY do zwiększania/zmniejszania liczników.
Ogólnie (projektując pamięć podręczną Redis dla swoich potrzeb):powinieneś starać się zapobiegać pobieraniu danych, których nie potrzebujesz.
Zalecam użycie skryptu Lua do przechowywania (/aktualizacji/usuwania) oraz pobierania raportu zbiorczego. Skrypty Lua są wykonywane na serwerze Redis. ServiceStack je obsługuje (SCRIPT LOAD + EVALSHA lub po prostu EVAL ) i możesz również wypróbować moduł klienta BookSleeve C# (którego używamy i jest nieco szybszy. 'szybszy' :dobry projekt redis-data jest oczywiście na pierwszym miejscu). Pipelining powinien być możliwy również z ServiceStack.
Jeśli kategorie i produkty mają identyfikator całkowity, można go również połączyć z ZSET , gdzie możesz użyć identyfikatora jako pola punktacji. Z ZRANGEBYSCORE możesz bezpośrednio uzyskać „rekord”. Ta technika jest bezpieczna, o ile twoje identyfikatory zawierają 15 lub mniej cyfr i nie używaj części dziesiętnej „punktacji”. Tak więc identyfikator musi pozostać w zakresie od -999999999999999 do 999999999999999. Uwaga:Te limity istnieją, ponieważ serwer Redis faktycznie przechowuje wynik (zmiennoprzecinkowy) jako reprezentację redis-string wewnętrznie.
Mam nadzieję, że to pomoże, TW