夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
Memcached笔记:.NET下 EnyimMemcached 驱动的应用

Memcached .NET驱动

Memcached 在.NET下使用到的开源类库或框架常用的就是 EnyimMemcached 和 ServiceStack ,后者也是在前者的基础上扩展的,提供了更多的接口方便我们开发使用。这两个DLL都可以通过Nuget下载,并且源码都已经托管到GitHub,有兴趣的码友可以Down源码自己研究。

EnyimMemcached 使用介绍

笔者使用的IDE环境是VS2017,Memcached 1.4.5版本,关于Memcached在Windows下的安装和启动,可以参考笔者上篇文章《Memcached笔记:安装配置详解》。

这里我们使用一个控制台项目讲解EnyimMemcached 类库的基础用法。


首先创建一个.NETFramework4.5的控制台项目(EnyimMemcached 暂不支持.net core,貌似有个 EnyimMemcachedCore 的项目支持core)。通过Nuget包管理器搜索EnyimMemcached 并安装。

也可以通过Nuget控制台的方式安装:

Install-Package EnyimMemcached -Version 2.16.0

接着配置MemcachedClient的连接,可以通过代码形式和config配置文件的形式。

MemcachedClientConfiguration config = new MemcachedClientConfiguration();
//服务的终结点可以有多个(意味着可以有多个Memcached实例服务器)
//client会对key进行hash算法 , 自动将数据保存到对应的实列服务器上
config.Servers.Add(new  IPEndPoint( IPAddress.Loopback,11211));//配置连接的IP地址和端口
config.Protocol =  MemcachedProtocol.Binary;//配置与Memcached协议的数据交互方式
//config.Authentication.Parameters["uname"] = "";//可以使用此属性用户名和密码 ,和阿里服务集成
//config.Authentication.Parameters["upass"] = "";
config.SocketPool.ConnectionTimeout =new TimeSpan(0,0,20);//配置连接超时时间
//config.SocketPool.DeadTimeout //设置实例服务器假死检测时间
config.SocketPool.MaxPoolSize = 100;//设置连接池的最大连接数
config.SocketPool.MinPoolSize = 5;//设置连接池的最小连接数
//config.SocketPool.QueueTimeout //设置数据保存超时时间
//config.SocketPool.ReceiveTimeout //设置数据接收超时时间
var mc = new MemcachedClient(config);

首先来看看默认形式的config文件配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="enyim.com">
      <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
    </sectionGroup>
  </configSections>
  <enyim.com>
    <memcached protocol="Text">
      <servers>
        <!-- Memcached 实例服务器列表 -->
        <!--<add address="localhost" port="11212" />-->
        <add address="127.0.0.1" port="11211" /> 
      </servers>
      <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
      <!-- 也可以配置和阿里等集成-->
      <authentication type="Enyim.Caching.Memcached.PlainTextAuthenticator, Enyim.Caching" userName="uname" password="upass" />
    </memcached>
  </enyim.com>
   
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>
var mc = new MemcachedClient();//.cs 文件中 使用空参实例化

也可以自定义section节点的方式配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
  </configSections>
  <memcached protocol="Binary">
    <servers>
      <!--<add address="127.0.0.1" port="11211" />-->
      <add address="127.0.0.1" port="11212" />
    </servers>
    <socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
  </memcached>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>
var mc = new MemcachedClient("memcached");//.cs 文件中 传入 section 节点名称


配置好Client的后我们就可以使用了,下面是 EnyimMemcached  帮我们封装好的一些方法:

var mc = new MemcachedClient("memcached");

mc.Store(StoreMode.Set, "key1", "12122");//写入缓存数据
mc.Store(StoreMode.Set, "key2", new Person());//存储对象
mc.Store(StoreMode.Set, "key3", "12122",DateTime.Now.AddDays(1));//写入缓存数据,并设置缓存失效时间为1天
mc.ExecuteStore(StoreMode.Set, "key4", "11111");

var keyStr= mc.Get("key1");//读取缓存数据
var keyObj=mc.Get<Person>("key2");//泛型方式

mc.Remove("key1");//移除缓存中指定的key

var status = mc.Stats();//获取实列服务器的运行状态信息
Console.WriteLine(status.GetValue(ServerStats.All, StatItem.ConnectionCount));
Console.WriteLine(status.GetValue(ServerStats.All, StatItem.GetCount));


关于EnyimMemcached  更加深入的使用,笔者会在后期的博文中继续阐述,敬请期待!

作者:暗夜余晖

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

2

支持

0

反对

posted @2018-1-7  拜读(1584)

评论列表

评论内容:



喜欢请打赏

支付宝 微信

请放心支付