Se você quer velocidade, deve se preparar o máximo possível ao armazenar a estrutura ou 'cache' no redis.Se você armazenar os produtos em um
HSET
, e adicione os contadores de categoria (um por categoria) ao lado de seu membro 'dados do produto' neste HSET
, você pode usar HINCRBY
para incrementar/diminuir os contadores. Em geral (projetando um cache Redis para suas necessidades):você deve tentar evitar a recuperação de dados desnecessários.
Eu recomendo usar um script Lua para armazenar (/atualizar/excluir) bem como recuperar seu relatório agregado. Os scripts Lua são executados no servidor Redis. O ServiceStack os suporta (
SCRIPT LOAD
+ EVALSHA
ou simplesmente EVAL
), e você também pode tentar o módulo cliente BookSleeve C# (que usamos e é um pouco mais rápido. 'mais rápido' :um bom design de redis-data vem primeiro, é claro). O cliente BookSleeve C# se concentra em redis pipelining multithread, que provavelmente é o que você deseja ao lidar com grandes conjuntos de dados. O pipeline também deve ser possível com o ServiceStack. Se as categorias e produtos tiverem um ID inteiro, você também pode combiná-lo com um
ZSET
, onde você pode usar o ID como o campo de pontuação. Com um ZRANGEBYSCORE
você pode obter diretamente o 'registro'. Esta técnica é segura desde que seus IDs estejam usando 15 dígitos ou menos, e não use a parte decimal da 'pontuação'. Portanto, o ID deve permanecer no intervalo -999999999999999 a 999999999999999. Observação:esses limites existem porque o servidor Redis realmente armazena a pontuação (float) como uma representação de cadeia de redis internamente. Espero ter ajudado, tw