Escribir valor

StackExchange.Redis Set/Get genéricos para configurar y leer valores

  1. La llamada interna IDatabase.StringSet() escribe datos de tipo cadena en Redis
  2. Lógica de serialización: objeto arbitrario → cadena JSON → arreglo de bytes UTF‑8 almacenado en Redis
  3. Lógica de deserialización: lectura del arreglo de bytes → cadena JSON → objeto genérico destino
  4. Valor devuelto: true = configuración exitosa, false = configuración fallida

Espacios de nombres requeridos

using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Lenguaje del código: CSS (css)

El siguiente ejemplo usa Set, recibe una clave, un arreglo de bytes y el tiempo de expiración.

/// <summary>
/// Escribir caché en Redis
/// </summary>
/// <param name="key">Clave de caché</param>
/// <param name="data">Cualquier objeto</param>
/// <param name="cacheTime">Duración de expiración 【minutos】</param>
/// <returns>true éxito / false fallo</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>
/// Serialización de objeto: object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    return Encoding.UTF8.GetBytes(json);
}

/// <summary>
/// Leer caché por clave
/// </summary>
/// <typeparam name="T">Tipo objetivo</typeparam>
/// <param name="key">Clave de caché</param>
/// <returns>devuelve default(T) si el caché no existe</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>
/// Deserialización: byte[] → objeto 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);
}Lenguaje del código: PHP (php)

Notas

  1. Unidad de tiempo
    En el código TimeSpan.FromMinutes(cacheTime) significa el valor ingresado representa 【minutos】
    Si llamas desde un formulario con Set(key,val,1000), el caché expirará en 1000 minutos, no en segundos!

El código anterior del formulario usaba el valor 1000, es un error muy común.
Si necesitas usar segundos, cámbialo por TimeSpan.FromSeconds(cacheTime)

  1. Instalación de dependencias
    Debes instalar ambos paquetes en NuGet:
  • StackExchange.Redis
  • Newtonsoft.Json
  1. Formato de almacenamiento
    Todos los objetos se serializan a binario JSON y se guardan en Redis; lo que ves en el cliente Redis es texto JSON estándar.
  2. Compatibilidad con RedisValue
    db.StringGet(key) devuelve RedisValue, admite conversión implícita a byte[], por lo que se puede pasar directamente a Deserialize<T>.
  3. Recomendación de seguridad para hilos
    IConnectionMultiplexer debe ser un singleton global, no crees una nueva conexión en cada lectura o escritura de Redis.

Ejemplo de uso

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

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

// Ejemplo de lectura de clase de entidad
// var model = Get<UserInfo>("user:1001");Lenguaje del código: JavaScript (javascript)

Recomendaciones

Extrae estos métodos junto con el código de conexión Redis a una clase helper estática independiente RedisHelper.cs. No los dejes dentro del código del formulario Form para lograr un desacoplamiento de lógica de negocio.

Escribir valor

Deja una respuesta

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