【发布时间】:2011-01-08 11:43:41
【问题描述】:
我刚开始切换到 memcached,目前正在使用 memcached 进行测试。
我有 2 个对象,我创建了一个对象并将 [Serializable] 放在它上面(例如,我们称之为 Object1),另一个对象是使用 Linq DBML 创建的(Object2)..
我尝试 memcached List<Object1>,它工作得很好,就像魅力一样,这里的一切都被缓存并正确加载。
然后,我转到 Linq 对象,现在我尝试添加到 memcached List<Object2> 这不起作用,它根本没有添加到 memcached 中。没有添加密钥
我继续并将序列化模式更改为单向,再次添加,仍然没有希望。
有没有办法让这个工作?
这是我刚刚写的简单测试,使用codeplex的MemcachedProvider来演示:
public ActionResult Test()
{
var returnObj = DistCache.Get<List<Post>>("testKey");
if (returnObj == null)
{
DataContext _db = new DataContext();
returnObj = _db.Posts.ToList();
DistCache.Add("testKey", returnObj, new TimeSpan(29, 0, 0, 0));
_db.Dispose();
}
return Content(returnObj.First().TITLE);
}
这是来自 Memcached,没有调用 STORE:
> NOT FOUND _x_testKey
>532 END
<528 get _x_testKey
> NOT FOUND _x_testKey
>528 END
<516 get _x_testKey
> NOT FOUND _x_testKey
>516 END
在我的 SQL 分析器中,它调用了 3 次查询 3 次测试时间 => 证明从 Memcached 回调的对象为空,然后进行查询。
【问题讨论】:
-
这个问题可能受益于 (1) 一些代码示例 (2) 更清楚地解释究竟出了什么问题,以及 (3) 您究竟是如何使用 .NET 中的 memcached。有多个 .NET 包装器,它们在这方面的行为可能不尽相同。
-
我添加了您需要的所有内容。我使用的包装器是来自 codeplex 的 MemcachedProvider。 object1 已成功添加,但不知何故 linq 对象没有。
-
额外信息有帮助,但我看不出有什么问题。您是否调试过 Add() 调用?使用 TCP 代理或 Wireshark 来查看 MemcachedProvider 是否为这个请求向 memcached 发送任何东西怎么样?
-
add 调用 do 只是对 memcached 的 Erym(或其他东西)包装器的调用。我在源文件中认为这没有问题。我将尝试获取另一个包装器,看看是否是因为 MemCachedProvider 问题。但与此同时,如果有人知道任何事情或经历过任何事情,请帮助我。我的想法是找到一种将序列化添加到 linq 对象的方法
-
作为参考,我为此场景编写了一个 protobuf-net 包装器;你可以“按原样”使用它,或者你可以写一些非常相似的东西并使用 DataContractSerializer。博客:marcgravell.blogspot.com/2010/01/…,代码:code.google.com/p/protobuf-net/source/browse/trunk/…
标签: linq-to-sql memcached