StackExchange.Redis: Conexões avançadas
Tags: redis, dotnet, programming, braziliandevs
Published: 2023-02-19 03:55:58

## Introdução

O Redis é um banco de dados de código aberto, muito utilizado em aplicações que necessitam de alto desempenho e baixa latência. Com o pacote `StackExchange.Redis`, é possível estabelecer conexões avançadas com o Redis, como instâncias do Redis com TLS ativado, implantações de cluster Redis e implantações do Redis Sentinel.

O Redis com TLS ativado é uma opção para quem deseja adicionar uma camada extra de segurança na comunicação com o banco de dados. Já as implantações de cluster Redis são utilizadas quando se precisa lidar com grande quantidade de dados e alta disponibilidade, permitindo que as operações sejam distribuídas entre vários nós. Por fim, as implantações do Redis Sentinel são utilizadas para monitorar e gerenciar instâncias Redis distribuídas, possibilitando uma maior disponibilidade e tolerância a falhas. Cada tipo de conexão possui suas próprias particularidades e benefícios, tornando-se uma opção interessante para diferentes cenários. 

## Conectando-se a instâncias do Redis com TLS ativado.

### Conectando no .NET Core (3.1, 5, 6, 7+)

`SslClientAuthenticationOptions` foi adicionado como uma forma opcional de configurar um `SslStream`. Isso fornece uma grande flexibilidade extra quando se trata de definir configurações de TLS Redis.

Usando o delegado `SslClientAuthenticationOptions` em `ConfigurationOptions`, você pode configurar:

- Protocolos SSL/TLS permitidos
- Conjuntos de cifras TLS/SSL permitidos na negociação de cifras
- Delegado de seleção de certificado
- Delegado de validação de certificado

```csharp
options.SslClientAuthenticationOptions = new Func<string, SslClientAuthenticationOptions>(
hostName => new SslClientAuthenticationOptions
{
		EnabledSslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13
});
```

## Conectando-se a implantações de cluster Redis.

Das Conexões Redis "avançadas", o cluster é provavelmente o mais fácil de entender. Conectar-se a uma instância do OSS Cluster é o mesmo que conectar-se a uma instância autônoma do Redis. A única exceção é que, ao listar endpoints, você desejará usar mais de um. Isso ocorre para que, se o endpoint que você está tentando alcançar tiver falhado, o multiplexador ainda tenha a chance de se conectar às outras instâncias mestre.

Um exemplo de `ConfigurationOptions` para uma instância de cluster pode parecer algo parecido com isso, observe como a coleção Endpoints usa vários endpoints que o `ConnectionMultiplexer` pode usar como backups se um dos endpoints falhar ao responder (possivelmente porque falhou).

```csharp
var options = new ConfigurationOptions
{
    EndPoints = new EndPointCollection{"redis-1:6379", "redis-2:6379", "redis-3:6379"}
};
```

## Conectando-se a implantações do Redis Sentinel

Conectar-se ao Redis Sentinel é um pouco diferente de conectar-se a outras instâncias do Redis.

A principal diferença é que, em vez de se conectar ao servidor mestre, você se conecta a uma das 'sentinelas' - as instâncias do Redis responsáveis por monitorar seu mestre e réplicas, detectar failovers e promover novos mestres. Além disso, você deve especificar o `ServiceName`, que corresponde ao nome mestre que você instrui os sentinelas a monitorar ao configurá-los.

```csharp
var options = new ConfigurationOptions
{
    EndPoints = new EndPointCollection{"sentinel-1:26379"},
    ServiceName = "sentinel"
};
var conn = ConnectionMultiplexer.Connect(options);
```

## Conclusão

O pacote `StackExchange.Redis` oferece suporte a vários tipos de conexões avançadas do Redis, incluindo instâncias com TLS ativado, implantações de cluster Redis e implantações do Redis Sentinel. Com essas opções, os desenvolvedores têm flexibilidade para escolher a melhor abordagem de acordo com as necessidades do seu projeto.