Variables.CACHESERVER ?
缓存服务器地址
@kingboy8808: 这个我也有在用,是没什么问题的。你只能去查查网络环境了,看看能不能PING通IP/端口对外有没开放什么的
@Yu: 你用的客户端dll是哪个版本的,我找了好久,只找到这个,好像是很早的,几年前的吧,都没找到有更新的
@kingboy8808: 应该一样的 也是几年前的 07年的了
@Yu: 请问题下有没有遇到这样的问题,使用Add或者Set方法以后
mycache.Set("news", news, 12D);//12D表示double类型的存储时间
在客户端查看内容,
get news
VALUE NEWS 8 1376
我不知道为什么结果把flag存成了8,默认的应该是0吧,请问您有没有遇到过这样的问题
@kingboy8808: news在没赋值下,是0的,我这是这样的
@Yu: 但是值的时候就是8了,这样好像就会导致一些问题
@kingboy8808: 不清楚你这个8从哪里来的
public bool Add(string key, object value, double expiry = 1) { return mc.Add(key, value, DateTime.Now.AddHours(expiry)); } public bool Add(string key, object value, int hashCode) { return mc.Add(key, value, hashCode); } public bool Set(string key, object value, double expiry = 1) { return mc.Set(key, value, DateTime.Now.AddHours(expiry)); } public bool Set(string key, object value, int hashCode) { return mc.Set(key, value, hashCode); }
只是这样简单的处理,然后调用,结果有的就把flag存为8了...
@kingboy8808: flag 只是个标志项, 跟实际的值没关系, 因为byte 是 1376,所以标志设置为8
你这VALUE NEWS 8 1376 的实际值应该是空
@Yu: 我调试的时候,用Get方法,看到这个
SerializationException thrown while trying to deserialize for key: ads3f8
...
@Yu: 方便把你的客户端dll发来不?
@Yu: 还有就是在保存的时候自动存入了对象所在程序集的信息,然而取的时候不在一个命名空间,所以取缓存反序列化的时候就会异常
@kingboy8808: 这个问题没碰过,还有我的DLL代码跟你差不多
你试试换个服务器 看看有没有这些情况
@Yu: 我反编译了代码,调试,结果发现,如果是在同一个站点取本站点存的缓存可以,但是在另外一个站点(不包含第一个站点的dll)取第一个站点存的就不行,一句话,如果没有站点的dll引用,就不能共用缓存
@Yu: 我反编译了代码,调试,结果发现,如果是在同一个站点取本站点存的缓存可以,但是在另外一个站点(不包含第一个站点的dll)取第一个站点存的就不行,一句话,如果没有站点的dll引用,就不能共用缓存(除了基本类型)
@kingboy8808:
你可以考虑去使用 Redis
检查一下站点二与memcached服务器连接的配置、Memcached.ClientLibrary.dll的引用有没有问题。
两个站点都是引用的同一个dll,自己简单封装了dll的调用
using Memcached.ClientLibrary; public sealed class CacheProvider : ICacheProvider { MemcachedClient mc = null; SockIOPool pool = null; string[] servers = { Variables.CACHESERVER }; public CacheProvider() { //初始化池 pool = SockIOPool.GetInstance(); pool.SetServers(servers);//添加服务器列表 pool.InitConnections = 3;//设置连接池初始数目 pool.MinConnections = 3;//设置最小连接数目 pool.MaxConnections = 1024;//设置最大连接数目 pool.SocketConnectTimeout = 1000;//设置连接的套接字超时 pool.SocketTimeout = 3000;//设置套接字超时读取 pool.MaintenanceSleep = 30;//设置维护线程运行的睡眠时间。如果设置为0,那么维护线程将不会启动 pool.Failover = true; pool.Nagle = false; pool.Initialize(); //客户端实例 mc = new Memcached.ClientLibrary.MemcachedClient(); mc.EnableCompression = false;//是否启用压缩数据 } /// <summary> /// 数据不存在时,新增缓存 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool Add(string key, object value) { return mc.Add(key, value); } }
站点2没连上站点1的memcached服务器