c# .net redis stackexchange.redis

c# - ¿Cómo almacenar objetos definidos por el usuario usando StackExchange.Redis?



.net (3)

Ejemplo: Cree el ejemplo de la función de ayuda a continuación, use JSON SerializeObject / DeSerializeObject antes de obtener / set. Pero esta solución tiene la limitación de tamaño del objeto no puede sobre Int32.MaxNumber (2,147,483,647 es 2Gb).

Código de muestra

public static void SetData<T>(string key, T data) { using (var redis = ConnectionMultiplexer.Connect("localhost:6379")) { IDatabase db = redis.GetDatabase(); JavaScriptSerializer json_serializer = new JavaScriptSerializer(); json_serializer.MaxJsonLength = int.MaxValue; db.StringSet(key, json_serializer.Serialize(data)); redis.Close(); } } public static T GetData<T>(string key) { using (var redis = ConnectionMultiplexer.Connect("localhost:6379")) { try { IDatabase db = redis.GetDatabase(); var res = db.StringGet(key); redis.Close(); if (res.IsNull) return default(T); else return JsonConvert.DeserializeObject<T>(res); } catch { return default(T); } } }

Pude hacer esto en ServiceStack.redis usando,

IRedisTypedClient<ObjectName> myObj = redisClient.As<ObjectName>();

Pero no pude encontrar ningún ejemplo para hacer esto en StackExchange.Redis.

¿Tengo que serializar a JSON y luego almacenarlos?

Gracias de antemano.


En este momento, SE.Redis no intenta ofrecer una serialización, simplemente hay muchas formas diferentes de hacerlo. Soy más bien de la opinión de que la biblioteca debería hacer una cosa, no 7. Debería ser posible agregar cualquier inquietud de serialización híbrida, etc. simplemente mediante métodos de extensión u otro código de plomería / envoltura, eligiendo cualquier estrategia de serialización que elija y cualquier biblioteca. tu eliges.


La solución más simple será usar json / binary / other serialización. Más complejo pero más nativo: utilizando redis "hashes" tipo de datos .

En el primer caso, prefiero la biblioteca protobuf (incluida por defecto en el paquete StackExchange.Redis.Extensions.Protobuf nuget). Pero puede usar la serialización json / binary / xml si lo necesita.

Hay un buen informe de rendimiento sobre todos ellos: http://www.maxondev.com/serialization-performance-comparison-c-net-formats-frameworks-xmldatacontractserializer-xmlserializer-binaryformatter-json-newtonsoft-servicestack-text/