首页 新闻 会员 周边 捐助

关于Memcached 急求!!!

0
悬赏园豆:20 [已解决问题] 解决于 2014-10-31 09:42

小弟使用mvc4(C#)开发,最近在使用Memcached,使用的客户端dll是Memcached.ClientLibrary.dll,在使用过程中遇到些问题,请大侠们不吝赐教,非常感谢,

当我在网站一中使用添加方法存储以后,新建了一个专用于缓存管理的沾点二,此时我想利用此站点获取或者删除在站点一中存的缓存,但是取不到,但是如果是在站点一中就可以取到,可以删除,请问大侠们这是什么问题,急求赐教,非常感谢!

kingboy8808的主页 kingboy8808 | 初学一级 | 园豆:5
提问于:2014-10-24 11:48
< >
分享
最佳答案
-1

Variables.CACHESERVER ?

收获园豆:20
Yu | 专家六级 |园豆:12990 | 2014-10-25 09:25

缓存服务器地址

kingboy8808 | 园豆:5 (初学一级) | 2014-10-27 13:52

@kingboy8808: 这个我也有在用,是没什么问题的。你只能去查查网络环境了,看看能不能PING通IP/端口对外有没开放什么的

Yu | 园豆:12990 (专家六级) | 2014-10-27 14:33

@Yu: 你用的客户端dll是哪个版本的,我找了好久,只找到这个,好像是很早的,几年前的吧,都没找到有更新的

kingboy8808 | 园豆:5 (初学一级) | 2014-10-28 10:30

@kingboy8808: 应该一样的 也是几年前的 07年的了

Yu | 园豆:12990 (专家六级) | 2014-10-28 12:39

@Yu: 请问题下有没有遇到这样的问题,使用Add或者Set方法以后

mycache.Set("news", news, 12D);//12D表示double类型的存储时间

在客户端查看内容,

get news

VALUE NEWS 8 1376

我不知道为什么结果把flag存成了8,默认的应该是0吧,请问您有没有遇到过这样的问题

kingboy8808 | 园豆:5 (初学一级) | 2014-10-29 11:32

@kingboy8808: news在没赋值下,是0的,我这是这样的

Yu | 园豆:12990 (专家六级) | 2014-10-29 11:44

@Yu:  但是值的时候就是8了,这样好像就会导致一些问题

kingboy8808 | 园豆:5 (初学一级) | 2014-10-29 11:47

@kingboy8808: 不清楚你这个8从哪里来的

Yu | 园豆:12990 (专家六级) | 2014-10-29 13:55
        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 | 园豆:5 (初学一级) | 2014-10-29 15:37

@kingboy8808: flag 只是个标志项, 跟实际的值没关系, 因为byte 是 1376,所以标志设置为8

 

你这VALUE NEWS 8 1376 的实际值应该是空

Yu | 园豆:12990 (专家六级) | 2014-10-29 17:00

@Yu: 我调试的时候,用Get方法,看到这个

SerializationException thrown while trying to deserialize for key: ads3f8

...

kingboy8808 | 园豆:5 (初学一级) | 2014-10-29 17:43

@Yu:  方便把你的客户端dll发来不?

kingboy8808 | 园豆:5 (初学一级) | 2014-10-29 17:51

@Yu: 还有就是在保存的时候自动存入了对象所在程序集的信息,然而取的时候不在一个命名空间,所以取缓存反序列化的时候就会异常

kingboy8808 | 园豆:5 (初学一级) | 2014-10-30 10:11

@kingboy8808: 这个问题没碰过,还有我的DLL代码跟你差不多

你试试换个服务器 看看有没有这些情况

Yu | 园豆:12990 (专家六级) | 2014-10-30 11:13

@Yu: 我反编译了代码,调试,结果发现,如果是在同一个站点取本站点存的缓存可以,但是在另外一个站点(不包含第一个站点的dll)取第一个站点存的就不行,一句话,如果没有站点的dll引用,就不能共用缓存

kingboy8808 | 园豆:5 (初学一级) | 2014-10-30 11:56

 @Yu: 我反编译了代码,调试,结果发现,如果是在同一个站点取本站点存的缓存可以,但是在另外一个站点(不包含第一个站点的dll)取第一个站点存的就不行,一句话,如果没有站点的dll引用,就不能共用缓存(除了基本类型)

kingboy8808 | 园豆:5 (初学一级) | 2014-10-30 11:58

@kingboy8808:

你可以考虑去使用 Redis

Yu | 园豆:12990 (专家六级) | 2014-10-30 13:16
其他回答(2)
0

检查一下站点二与memcached服务器连接的配置、Memcached.ClientLibrary.dll的引用有没有问题。

libaoheng | 园豆:1433 (小虾三级) | 2014-10-24 11:54

两个站点都是引用的同一个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);
        }
}
支持(0) 反对(0) kingboy8808 | 园豆:5 (初学一级) | 2014-10-24 12:31
0

站点2没连上站点1的memcached服务器

dudu | 园豆:30778 (高人七级) | 2014-10-24 18:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册