Gravar valor

StackExchange.Redis Set/Get genéricos para configuração e leitura

  1. A chamada interna IDatabase.StringSet() grava dados do tipo string no Redis
  2. Lógica de serialização: objeto qualquer → string JSON → vetor de bytes UTF‑8 salvo no Redis
  3. Lógica de desserialização: leitura do vetor de bytes → string JSON → objeto genérico de destino
  4. Valor de retorno: true = configuração bem‑sucedida, false = falha na configuração

Namespaces necessários

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Code language: CSS (css)

No exemplo abaixo, usamos Set informando a chave, o vetor de bytes e o tempo de expiração.

/// <summary>
/// Gravar cache no Redis
/// </summary>
/// <param name="key">Chave do cache</param>
/// <param name="data">Qualquer objeto</param>
/// <param name="cacheTime">Tempo de expiração 【minutos】</param>
/// <returns>true sucesso / false falha</returns>
private bool Set(string key, object data, int cacheTime)
{
    if (data == null)
    {
        return false;
    }
    byte[] entryBytes = Serialize(data);
    TimeSpan expiresIn = TimeSpan.FromMinutes(cacheTime);
    return db.StringSet(key, entryBytes, expiresIn);
}

/// <summary>
/// Serialização de objeto: object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}

/// <summary>
/// Ler cache a partir da chave
/// </summary>
/// <typeparam name="T">Tipo de destino</typeparam>
/// <param name="key">Chave do cache</param>
/// <returns>retorna default(T) caso o cache não exista</returns>
public T Get<T>(string key)
{
    RedisValue rValue = db.StringGet(key);
    if (!rValue.HasValue)
    {
        return default(T);
    }
    T result = Deserialize<T>(rValue);
    return result;
}

/// <summary>
/// Desserialização: byte[] → objeto do tipo T
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    string json = Encoding.UTF8.GetString(serializedObject);
    return JsonConvert.DeserializeObject<T>(json);
}Code language: PHP (php)

Observações

  1. Unidade de tempo
    No código TimeSpan.FromMinutes(cacheTime) significa que o valor informado é em 【minutos】
    Se você chamar pelo formulário com Set(key,val,1000), o cache vai expirar depois de 1000 minutos, não em segundos!

O código anterior do formulário usava o valor fixo 1000, esse é um ponto de erro muito comum.
Se quiser trabalhar com segundos, substitua por TimeSpan.FromSeconds(cacheTime)

  1. Instalação das dependências
    É preciso instalar os dois pacotes via NuGet:
  • StackExchange.Redis
  • Newtonsoft.Json
  1. Formato de armazenamento
    Todos os objetos são serializados para binário JSON e salvos no Redis; ao abrir um cliente Redis você visualiza um texto JSON padrão.
  2. Compatibilidade com RedisValue
    db.StringGet(key) retorna RedisValue, ele suporta conversão implícita para byte[], podendo ser passado diretamente para Deserialize<T>.
  3. Dica sobre segurança de threads
    IConnectionMultiplexer deve ser um singleton global, não crie uma nova conexão toda vez que ler ou gravar dados no Redis.

Exemplo de uso

// Gravar (expira em 30 minutos)
bool ok = Set("user:1001", new {Id = 1001, Name = "test"}, 30);

// Ler valor
var user = Get<dynamic>("user:1001");

// Exemplo de leitura de classe de entidade
// var model = Get<UserInfo>("user:1001");Code language: JavaScript (javascript)

Recomendações

Extraia esses métodos junto com o código de conexão Redis para uma classe auxiliar estática independente RedisHelper.cs. Evite colocá‑los dentro do código do formulário Form para separar as regras de negócio.

Gravar valor

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *