La nostra attuale implementazione della memorizzazione nella cache memorizza grandi quantità di dati negli oggetti del report (in alcuni casi 50 MB).Come memorizzare nella cache di oggetti di grandi dimensioni utilizzando la cache Redis
Abbiamo spostato dalla cache di memoria alla cache di file e utilizzare ProtoBuf per serializzare e de-serializzare. Funziona bene, ma ora stiamo sperimentando con la cache Redis. Di seguito è riportato un esempio di quanto tempo è necessario per Redis rispetto all'utilizzo del file system. (Nota: l'utilizzo di protobuf al posto di JsonConvert migliora il tempo impostato a 15 secondi e ottiene il tempo a 4 secondi nell'esempio seguente, quando si imposta un array di byte).
// Extremely SLOW – caching using Redis (JsonConvert to serialize/de-serialize)
IDatabase cache = Connection.GetDatabase();
// 23 seconds!
cache.StringSet("myKey", JsonConvert.SerializeObject(bigObject));
// 5 seconds!
BigObject redisResult = JsonConvert.DeserializeObject<BigObject>(cache.StringGet("myKey"));
// FAST - caching using file system (protobuf to serialize/de-serialize)
IDataAccessCache fileCache = new DataAccessFileCache();
// .5 seconds
fileCache.SetCache("myKey",bigObject);
// .5 seconds
BigObject fileResult = fileCache.GetCache<BigObject>("myKey");
Grazie in anticipo per qualsiasi aiuto.
ps. Non ho trovato una risposta da simili domande poste. Caching large objects - LocalCache performance
o
Caching large objects, reducing impact of retrieval times
È possibile separare la serializzazione dall'inserimento della cache per determinare che cosa consuma tempo? Probabilmente è la serializzazione di JSon. Prova un diverso metodo di serializzazione, ad esempio [BinaryFormatter] (https://msdn.microsoft.com/es-es/library/system.runtime.serialization.formatters.binary.binaryformatter%28v=vs.110%29.aspx?f= 255 & MSPPError = -2.147,217396 millions). – thepirat000
Grazie per la rapida risposta. La serializzazione è solo di circa 1 secondo (dei 23). Quando siamo passati dalla memoria all'archiviazione dei file, abbiamo iniziato con BinaryFormatter, ma era "lento", quindi siamo passati a ProtoBuf. Darò un colpo. – Jon
Quanto è grande l'oggetto serializzato? Hai provato la compressione? Ad esempio [Questo] (https://github.com/thepirat000/CachingFramework.Redis/blob/master/CachingFramework.Redis/Serializers/BinarySerializer.cs) – thepirat000