現在のキャッシング実装では、レポートオブジェクトに大量のデータをキャッシュします(場合によっては50MB)。Redisキャッシュを使用してラージオブジェクトをキャッシュする方法
メモリキャッシュからファイルキャッシュに移動し、ProtoBufを使用してシリアライズおよびデシリアライズしました。これはうまくいきますが、Redisのキャッシュを試しています。 以下は、ファイルシステムを使用する場合よりもRedisにかかる時間の例です。 (注:JsonConvertの代わりにprotobufを使用すると、設定時間が15秒に短縮され、バイト配列を設定する場合、以下の例では4秒になります)。
// 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");
ご協力いただきありがとうございます。
ps。私は尋ねられた同様の質問から答えを見つけませんでした。 Caching large objects - LocalCache performance
又は
Caching large objects, reducing impact of retrieval times
シリアライズをキャッシュ挿入から分離して、消費時間を判断できますか?それはおそらくJSonのシリアル化です。別のシリアル化メソッド、[BinaryFormatter]を試してください(https://msdn.microsoft.com/es-es/library/system.runtime.serialization.formatters.binary.binaryformatter%28v=vs.110%29.aspx?f= 255&MSPPError = -2147217396)。 – thepirat000
迅速な対応に感謝します。シリアライゼーションは(23の)約1秒です。私たちがメモリからファイルストレージに移動したとき、BinaryFormatterを使い始めましたが、それは「遅い」ので、ProtoBufに切り替えました。私はそれを撃つだろう。 – Jon
オブジェクトのシリアライズはどのくらいですか?あなたは圧縮を試みましたか?すなわち[This](https://github.com/thepirat000/CachingFramework.Redis/blob/master/CachingFramework.Redis/Serializers/BinarySerializer.cs) – thepirat000