Enyim:服务器不支持操作或请求格式错误

时间:2013-07-10 10:01:44

标签: memcached enyim.caching

我正在尝试使用Memcache服务器中的Enyim客户端库来获取密钥值。

连接到memcache服务器之后,我能够写入/替换键值,但在使用get操作时会抛出异常:

  

NotSupportedException未处理   服务器不支持操作或请求格式错误。如果是后者请报告   给开发者的错误。

请注意,我可以使用telnet /其他memcache库读取此值。

我不确定我是否遗漏了某些东西,或者Enyim包装中是否有错误?

这是代码。

using System;
using System.Net;
using Enyim.Caching;
using Enyim.Caching.Configuration;
using Enyim.Caching.Memcached;

namespace Memcached
{
public class MemcacheClient
{
    private MemcachedClient _mc;
    private static readonly TimeSpan MinExpirationTimeSpan = new TimeSpan(0, 0, 30);


    public  MemcacheClient()
    {
        Startup();
    }

    private void Startup()
    {
        var config = new MemcachedClientConfiguration();
        config.Servers.Add(new IPEndPoint(IPAddress.Loopback, 11212));
       // config.Servers.Add(new IPEndPoint(IPAddress.Loopback, 11213));
        config.Protocol = MemcachedProtocol.Text;
        _mc = new MemcachedClient(config);
    }


    public bool SetItem(string key, object value)
    {
        if (_mc != null)
            return _mc.Store(StoreMode.Set, key, value);
        return false;
    }

    public bool SetItem(string key, object value, TimeSpan duration)
    {
        _ValidateExpirationDuration(duration);

        if (_mc != null)
        {
           var restult = _mc.Store(StoreMode.Set, key, value, DateTime.Now + duration);
            _mc.FlushAll();
            return restult;
        }
        return false;
    }

    private static void _ValidateExpirationDuration(TimeSpan duration)
    {
        if (duration <= MinExpirationTimeSpan)
            throw new ArgumentException("Cache expiration times of less than 30 seconds are ignored", "duration");
    }

    public object GetItem(string key)
    {
        if (_mc != null)
           return  _mc.Get(key); //<----------getting exception here
        return null;
    }

    public T GetItem<T>(string key) where T : class
    {
        var result = GetItem(key);
        if (result != null)
        {
            var targetObject = result as T;
            if (targetObject != null)
                return targetObject;
        }
        return null;
    }

    public bool Replace(string key, object value, TimeSpan duration)
    {
        _ValidateExpirationDuration(duration);
        if (_mc != null)
            return _mc.Store(StoreMode.Replace,  key, value, DateTime.Now + duration);
        return false;
    }

    public bool Replace(string key, object value)
    {
        if (_mc != null)
            return _mc.Store(StoreMode.Replace, key, value);
        return false;
    }


 }
}

调用功能

using System;
using System.Globalization;

namespace TryEnyim
{
class Program
{
    static void Main(string[] args)
    {
        var cache = new Memcached.MemcacheClient();
        Console.Write("Writing to cache: " + cache.SetItem("myString", "This is enyim @" + System.DateTime.Now.ToString(CultureInfo.InvariantCulture)));
        cache.Replace("myString", "This is enyim again @" + System.DateTime.Now.AddSeconds(10).ToString(CultureInfo.InvariantCulture));
        Console.WriteLine("Read key now: " + cache.GetItem<string>("myString"));// <----------getting exception here

        Console.ReadLine();

    }
 }

}

我正在使用NuGet的Enyim软件包(版本2.12.0.0)。

任何帮助都会有用。

由于

1 个答案:

答案 0 :(得分:0)

最后!我得到了解决方案

在花时间进行代码调试之后,我决定将Memcached服务器从1.2.4升级到1.4.5。

在Memcached服务器升级之后,Enyim缓存客户端就像魅力一样。

简单解决方案:

  

使用最新版本升级Memcached服务器。