StackExchange.Redis : méthodes génériques Set / Get pour écriture et lecture
- L’appel sous‑jacent
IDatabase.StringSet()écrit des données de type chaîne dans Redis - Logique de sérialisation : objet arbitraire → chaîne JSON → tableau d’octets UTF‑8 stocké dans Redis
- Logique de désérialisation : lecture du tableau d’octets → chaîne JSON → objet générique cible
- Valeur de retour :
true= réussi,false= échec
Espaces de noms à importer
using StackExchange.Redis;
using Newtonsoft.Json;
using System.Text;Langage du code : CSS (css)
L’exemple ci‑dessous utilise Set : on transmet une clé, un tableau d’octets et une durée d’expiration.
/// <summary>
/// Écrire une entrée dans le cache Redis
/// </summary>
/// <param name="key">Clé de cache</param>
/// <param name="data">Objet quelconque</param>
/// <param name="cacheTime">Durée d’expiration 【minutes】</param>
/// <returns>true réussi / false échec</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>
/// Sérialisation d’objet : object → byte[]
/// </summary>
private byte[] Serialize(object data)
{
string json = JsonConvert.SerializeObject(data);
return Encoding.UTF8.GetBytes(json);
}
/// <summary>
/// Lire le cache à partir d’une clé
/// </summary>
/// <typeparam name="T">Type cible</typeparam>
/// <param name="key">Clé de cache</param>
/// <returns>Retourne default(T) si la clé n’existe pas</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>
/// Désérialisation : byte[] → objet de type 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);
}Langage du code : PHP (php)
Remarques
- Unité de temps
Dans le codeTimeSpan.FromMinutes(cacheTime)signifie que la valeur fournie est exprimée en 【minutes】
Si vous appelezSet(key,val,1000)depuis votre formulaire, le cache expirera au bout de 1000 minutes, pas en secondes !
L’exemple du formulaire utilisait la valeur codée en dur
1000, c’est une erreur fréquente.
Si vous voulez utiliser des secondes, remplacez‑le parTimeSpan.FromSeconds(cacheTime)
- Installation des dépendances
Installez ces deux paquets NuGet :
StackExchange.RedisNewtonsoft.Json
- Format de stockage des données
Tous les objets sont sérialisés en binaire JSON et sauvegardés dans Redis ; ce que vous voyez dans un client Redis est du texte JSON standard. - Compatibilité
RedisValuedb.StringGet(key)renvoie unRedisValue, qui se convertit implicitement enbyte[]et peut être passé directement àDeserialize<T>. - Conseil sur la sécurité des threads
IConnectionMultiplexerdoit être un singleton global. Ne créez pas une nouvelle connexion à chaque lecture‑écriture Redis.
Exemple d’utilisation
// Écrire une entrée (expire au bout de 30 minutes)
bool ok = Set("user:1001", new {Id = 1001, Name = "test"}, 30);
// Lire la valeur
var user = Get<dynamic>("user:1001");
// Exemple de lecture d’un modèle d’entité
// var model = Get<UserInfo>("user:1001");Langage du code : JavaScript (javascript)
Recommandations
Extrayez ces méthodes d’assistance et le code de connexion Redis dans une classe statique séparée RedisHelper.cs. Évitez de les placer dans le code‑behind du formulaire pour séparer les responsabilités.
Écrire une valeur
Previous: Se connecter à Redis