Leer valor

Leer valor de Redis con Get

  1. API de bajo nivel:IDatabase.StringGet(key), lee datos de tipo cadena desde Redis, devuelve RedisValue
  2. RedisValue.HasValue:comprueba si la clave existe y contiene datos válidos
    • true:la clave existe;
    • false:la clave no existe
  3. Después de obtener datos binarios, debes deserializar para restaurar el objeto original
  4. Devuelve default(T) cuando la clave no existe
    • Tipos de valor(int/DateTime):devuelve 0, fecha‑hora mínima
    • Tipos de referencia(class):devuelve null

Ejemplos

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;

/// <summary>
/// Leer objeto caché mediante Key
/// </summary>
/// <typeparam name="T">Tipo del objeto destino</typeparam>
/// <param name="key">Nombre de clave de caché</param>
/// <returns>Devuelve el objeto si existe; devuelve default(T) si no existe</returns>
public T Get<T>(string key)
{
    // Leer datos desde redis
    RedisValue rValue = db.StringGet(key);

    // Comprobar que la clave no existe
    if (!rValue.HasValue)
    {
        return default(T);
    }

    // Deserializar datos binarios a entidad
    T result = Deserialize<T>(rValue);
    return result;
}

/// <summary>
/// Deserialización:byte[] → objeto T
/// </summary>
private T Deserialize<T>(byte[] serializedObject)
{
    if (serializedObject == null)
    {
        return default(T);
    }
    // Convertir array de bytes a cadena json
    string json = Encoding.UTF8.GetString(serializedObject);
    // Convertir json a entidad destino
    return JsonConvert.DeserializeObject<T>(json);
}

/// <summary>
/// Método de serialización de objeto (complementario a Set)
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}Lenguaje del código: C# (cs)

Notas importantes

  1. Conversión implícita de tipos
    RedisValue permite conversión implícita directa a byte[], puedes pasar rValue directamente a Deserialize<T>(byte[]), el compilador realiza la conversión automáticamente.
  2. Flujo emparejado de lectura y escritura
Flujo escritura SetEntidadSerializebyte[]Redis
Flujo lectura GetRedisbyte[]DeserializeEntidadLenguaje del código: CSS (css)
  1. Ejemplo de invocación
// Ejemplo1: Leer entidad personalizada
var user = Get<User>("user_1001");

// Ejemplo2: Leer cadena simple
string text = Get<string>("msg");

// Ejemplo3: Leer valor numérico
int count = Get<int>("visit_count");Lenguaje del código: C# (cs)
  1. Tipos de serialización y deserialización no coincidentes
    Si guardas User e intentas leerlo como Student, se produce una excepción de deserialización Json.
  2. Comprobación de valor nulo fácilmente olvidada con default(T)
var model = Get<User>("key");
// Para tipos de referencia inexistentes model=null, acceder directamente a model.Name causa excepción de referencia nula
if(model != null)
{

}Lenguaje del código: C# (cs)
  1. Codificación unificada
    Debes usar siempre Encoding.UTF8 tanto para escritura como lectura, de lo contrario aparecerán caracteres corruptos.

Leer valor

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *