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