首页 新闻 会员 周边 捐助

C#的memcached客户端使用问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-08-21 12:24

1、.NET memcached client library 是否支持鉴权,通过用户名、密码来访问memcached server?

2、Enyim Memcached客户端是否支持压缩?好像没找到类似.NET memcached client里面那样的MemcachedClient.EnableCompression压缩选项。

求高人指点~~

攻城不用狮的主页 攻城不用狮 | 初学一级 | 园豆:197
提问于:2014-08-21 11:09
< >
分享
最佳答案
0

1. 支持,我们就这样使用了,示例配置如下:

<enyim.com>
    <memcached protocol="Binary">
        <servers>
            <add address="memcached" port="11211" />
        </servers>            
        <authentication type="Enyim.Caching.Memcached.PlainTextAuthenticator, Enyim.Caching" zone="" userName="用户名" password="密码" />            
    </memcached>
    <log factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter" />
</enyim.com>

2. 有些memcached服务器会在服务端进行压缩,比如Couchbase。

如果在客户端压缩,可以自己进行压缩,在.NET中进行压缩/解压很简单,示例代码如下:

static string Compress(string s)
{
    if (string.IsNullOrEmpty(s)) return s;

    var bytes = Encoding.Unicode.GetBytes(s);
    using (var msi = new MemoryStream(bytes))
    using (var mso = new MemoryStream())
    {
        using (var gs = new GZipStream(mso, CompressionMode.Compress))
        {
            msi.CopyTo(gs);
        }
        return Convert.ToBase64String(mso.ToArray());
    }
}

static string Decompress(string s)
{
    if (string.IsNullOrEmpty(s)) return s;

    var bytes = Convert.FromBase64String(s);
    using (var msi = new MemoryStream(bytes))
    using (var mso = new MemoryStream())
    {
        using (var gs = new GZipStream(msi, CompressionMode.Decompress))
        {
            gs.CopyTo(mso);
        }
        return Encoding.Unicode.GetString(mso.ToArray());
    }
} 
收获园豆:5
dudu | 高人七级 |园豆:29570 | 2014-08-21 11:31

谢谢@dudu ,你提供的方法很好用,已经解决了。

攻城不用狮 | 园豆:197 (初学一级) | 2014-08-21 14:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册