在Redis / MemCache等缓存系统中,需要序列化和反序列化对象。存储对象时,一个序列化,当访问该对象时,需要反序列化。
C#/。Net MemCache是否还需要序列化/去序列化对象?例如当我存储下面一个类的对象时,只是在缓存中设置的对象引用,或者该对象在存储到缓存之前被序列化?测试表明缓存只存储引用。但我想检查一下。
class CacheData
{
public int A = 0;
public int B = 0;
}
private static void TestMemoryCache()
{
CacheData origObject = new CacheData();
ObjectCache cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
cache.Set("someKey", origObject, policy);
origObject.A = 2;
origObject.B = 3;
CacheData cachedObj = cache["someKey"] as CacheData;
if (cachedObj == origObject)
Console.WriteLine("Same");
else
Console.WriteLine("Distinct");
cachedObj.A = 5555;
cachedObj = cache["someKey"] as CacheData;
Console.WriteLine("The A value is: " + cachedObj.A);
}
答案 0 :(得分:6)
我无法立即在文档中找到任何明确指出对象是否已序列化的内容,除非这就是将其称为"对象缓存"的含义。实际上,对象未序列化,并且只是按原样保存在内存中。
您可以通过阅读参考来源来验证此行为。虽然当前的实现不是未来行为的保证,但改变实现以使用序列化可能会在很多方面破坏事物,我认为可以安全地说它不会改变。< / p>
相关参考源链接: