Leer valor de Redis con Get
- API de bajo nivel:
IDatabase.StringGet(key), lee datos de tipo cadena desde Redis, devuelveRedisValue RedisValue.HasValue:comprueba si la clave existe y contiene datos válidostrue:la clave existe;false:la clave no existe
- Después de obtener datos binarios, debes deserializar para restaurar el objeto original
- 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
- Conversión implícita de tipos
RedisValuepermite conversión implícita directa a byte[], puedes pasarrValuedirectamente aDeserialize<T>(byte[]), el compilador realiza la conversión automáticamente. - Flujo emparejado de lectura y escritura
Flujo escritura Set:Entidad → Serialize → byte[] → Redis
Flujo lectura Get:Redis → byte[] → Deserialize → EntidadLenguaje del código: CSS (css)
- 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)
- Tipos de serialización y deserialización no coincidentes
Si guardasUsere intentas leerlo comoStudent, se produce una excepción de deserialización Json. - 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)
- Codificación unificada
Debes usar siempreEncoding.UTF8tanto para escritura como lectura, de lo contrario aparecerán caracteres corruptos.
Leer valor
Previous: Escribir valor
Next: Comprobar existencia