Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Este é um bom caso de uso para Redis em uma API REST ServiceStack?

O que pensar ao projetar um aplicativo NoSQL Redis


1) Para desenvolver corretamente no Redis, você deve pensar mais em como estruturaria os relacionamentos em seu programa C#, ou seja, com as classes de coleção C#, em vez de um modelo relacional destinado a um RDBMS. A melhor mentalidade seria pensar mais no armazenamento de dados como um banco de dados de documentos em vez de tabelas RDBMS. Essencialmente, tudo é blobbed no Redis por meio de uma chave (índice), então você só precisa descobrir quais são suas entidades primárias (ou seja, raízes agregadas) que seriam mantidas em seu próprio 'namespace de chave' ou se é uma entidade não primária, ou seja, simplesmente metadados que devem ser persistidos com sua entidade pai.

Exemplos de Redis como um armazenamento de dados primário


Aqui está um bom artigo que mostra como criar um aplicativo de blog simples usando o Redis:

http://www.servicestack.net/docs/redis-client/designing-nosql-database

Você também pode consultar o código-fonte do RedisStackOverflow para outro exemplo do mundo real usando o Redis.

Basicamente, você precisaria armazenar e buscar os itens de cada tipo separadamente.
var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);

A forma como você armazena o relacionamento entre as entidades está fazendo uso dos Sets do Redis, por exemplo:você pode armazenar o relacionamento Users/Watchers conceitualmente com:
SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]

O Redis não tem esquema e é idempotente


Armazenar ids em conjuntos redis é idempotente, ou seja, você pode adicionar watcherId1 para o mesmo conjunto várias vezes e só terá uma ocorrência dele. Isso é bom porque significa que você nunca precisa verificar a existência do relacionamento e pode continuar adicionando IDs relacionados como se eles nunca tivessem existido.

Relacionado:gravar ou ler em uma coleção do Redis (por exemplo, List) que não existe é o mesmo que gravar em uma coleção vazia, ou seja, uma lista é criada dinamicamente quando você adiciona um item a uma lista enquanto acessa uma lista existente simplesmente retornará 0 resultados. Este é um ganho de produtividade e sem atritos, pois você não precisa definir seus esquemas antecipadamente para usá-los. Embora você precise, o Redis fornece a operação EXISTS para determinar se existe uma chave ou uma operação TYPE para que você possa determinar seu tipo.

Crie seus relacionamentos/índices em suas gravações


Uma coisa a lembrar é que, como não há índices implícitos no Redis, você geralmente precisará configurar seus índices/relacionamentos necessários para ler a si mesmo durante suas gravações. Basicamente, você precisa pensar em todos os seus requisitos de consulta antecipadamente e garantir que você configure os relacionamentos necessários no momento da gravação. O código-fonte RedisStackOverflow acima é um bom exemplo que mostra isso.

Observação:o provedor ServiceStack.Redis C# pressupõe que você tenha um campo exclusivo chamado Id essa é sua chave primária. Você pode configurá-lo para usar um campo diferente com o ModelConfig.Id() mapeamento de configuração.

Persistência do Redis


2) O Redis suporta 2 tipos de modos de persistência RDB prontos para uso e Anexar Somente Arquivo (AOF). O RDB grava instantâneos de rotina enquanto o Append Only File age como um diário de transações registrando todas as alterações entre os instantâneos - recomendo adicionar ambos até que você se sinta confortável com o que cada um faz e com o que seu aplicativo precisa. Você pode ler toda a persistência do Redis em http://redis.io/topics/persistence.

Observação O Redis também suporta replicação trivial sobre a qual você pode ler mais em:http://redis.io/topics/replication

Redis adora RAM


3) Como o Redis opera predominantemente na memória, o recurso mais importante é que você tenha RAM suficiente para manter todo o conjunto de dados na memória + um buffer para quando ele for instantâneo no disco. O Redis é muito eficiente, portanto, mesmo uma pequena instância da AWS poderá lidar com muita carga - o que você deseja procurar é ter RAM suficiente.

Visualizando seus dados com a interface do administrador do Redis


Por fim, se você estiver usando o cliente Redis ServiceStack C#, recomendo instalar a interface do usuário do Redis Admin, que fornece uma boa visualização visual de suas entidades. Você pode ver uma demonstração ao vivo em:http://servicestack.net/RedisAdminUI/AjaxClient/