使用Enyim.Caching访问阿里云的OCS

简介:

阿里云的开放式分布式缓存(OCS)简化了缓存的运维管理,使用起来很方便,官方推荐的.NET访问客户端类库为 Enyim.Caching,下面对此做一个封装。

首先引用最新版本 Enyim.Caching ,比如2.13.2.0 版本。

先按照阿里云的示例代码,封装一个基础的 MemCached访问类:

复制代码
 public sealed class MemCached
    {
        private static MemcachedClient MemClient;
        static readonly object padlock = new object();
        //线程安全的单例模式
        public static MemcachedClient getInstance()
        {
            if (MemClient == null)
            {
                lock (padlock)
                {
                    if (MemClient == null)
                    {
                        MemClientInit();
                    }
                }
            }
            return MemClient;
        }

        static void MemClientInit()
        {
         
             //初始化缓存
             string host = System.Configuration.ConfigurationManager.AppSettings["MemoryCacheServer"];
             MemcachedClientConfiguration memConfig = new MemcachedClientConfiguration();
             IPAddress newaddress = IPAddress.Parse(Dns.GetHostEntry (host).AddressList[0].ToString());//your_ocs_host替换为OCS内网地址 
             IPEndPoint ipEndPoint = new IPEndPoint(newaddress, 11211);

               // 配置文件 - ip
             memConfig.Servers.Add(ipEndPoint);
             // 配置文件 - 协议
             memConfig.Protocol = MemcachedProtocol.Binary;
             // 配置文件-权限
             memConfig.Authentication.Type = typeof(PlainTextAuthenticator);
             memConfig.Authentication.Parameters["zone"] = "";
             memConfig.Authentication.Parameters["userName"] =  System.Configuration.ConfigurationManager.AppSettings["CacheServerUID"];
             memConfig.Authentication.Parameters["password"] =  System.Configuration.ConfigurationManager.AppSettings["CacheServerPWD"];
             //下面请根据实例的最大连接数进行设置
             memConfig.SocketPool.MinPoolSize = 5;
             memConfig.SocketPool.MaxPoolSize = 200;
             MemClient=new MemcachedClient(memConfig);
           
            //如果采用配置文件,可以注释上面代码,直接下面一行代码:
            //MemClient = new MemcachedClient();
        }
    }
复制代码

 再定义一个缓存访问接口:

复制代码
public interface ICacheManager
    {
        /// <summary>
        /// 是否启用缓存
        /// </summary>
        bool IsEnabled { get; }

        /// <summary>
        /// 根据key取缓存对象
        /// </summary>
        T Get<T>(string key);

        object Get(string key);

        /// <summary>
        /// 放入缓存
        /// </summary>
        bool Set(string key, object data, int cacheTime);

        /// <summary>
        /// 是否在缓存中
        /// </summary>
        bool IsSet(string key);

        /// <summary>
        /// 从缓存删除
        /// </summary>
        void Remove(string key);

        /// <summary>
        /// 根据规则删除
        /// </summary>
        void RemoveByPattern(string pattern);

        /// <summary>
        /// 清空所有缓存
        /// </summary>
        void Clear();
    }
复制代码

最后封装 OCSManager:

复制代码
public class OCSManager : ICacheManager
    {
        private static readonly MemcachedClient cache;
        private static readonly OCSManager instance;

        private OCSManager()
        {

        }

        static OCSManager()
        {
            cache = MemCached.getInstance();
            instance = new OCSManager();
            
        }

      

        private static bool isServerConnected = true;



        public static ICacheManager Instance
        {
            get { return instance; }
        }

        #region ICacheManager 成员

        public bool IsEnabled
        {
            get { return cache != null && isServerConnected; }
        }

        public T Get<T>(string key)
        {
            //var result = cache.ExecuteGet<T>(key);
            //return result.Value;
            return cache.Get<T>(key);
        }

        public object Get(string key)
        {
            return cache.Get(key);
        }

        public bool Set(string key, object data, int cacheTime)
        {
            if (data == null)
                return false;
           
            //var result= cache.ExecuteStore (Enyim.Caching.Memcached.StoreMode.Add,key,data,DateTime.Now + TimeSpan.FromMinutes(cacheTime));
            //return result.Success;

            return  cache.Store(Enyim.Caching.Memcached.StoreMode.Set, key, data, DateTime.Now + TimeSpan.FromMinutes(cacheTime));
        }

        public bool IsSet(string key)
        {
            object obj;
            return cache.TryGet(key, out obj);
        }

        public void Remove(string key)
        {
            cache.Remove(key);
        }

        public void RemoveByPattern(string pattern)
        {
            //throw new NotImplementedException();
        }

        public void Clear()
        {
            cache.FlushAll();
        }

      
        #endregion
    }
复制代码

 最后,在应用程序配置文件,增加上如下的配置节点:

复制代码
   <configSections>
    <sectionGroup name="enyim.com">
      <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
    </sectionGroup>
  </configSections>

  <enyim.com>
    <memcached protocol="Binary">
      <servers>
        <add address="192.168.70.1" port="11211" />
      </servers>
      <socketPool minPoolSize="20" maxPoolSize="500" connectionTimeout="00:00:01" deadTimeout="00:00:01" receiveTimeout="00:00:01" />
      <authentication type="Enyim.Caching.Memcached.PlainTextAuthenticator,Enyim.Caching" zone="" userName="" password="" />
    </memcached>
  </enyim.com> 
复制代码

 注意:OCS使用的时候,会分配指定的用户名和密码, userName="" password="" ,请在实际使用之前做好这个配置。


    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/p/5642650.html,如需转载请自行联系原作者




相关文章
|
2月前
|
缓存 负载均衡 网络协议
阿里云DNS常见问题之某个地域访问不到如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
域名解析 网络协议 开发工具
阿里云DNS常见问题之访问重定向的url访问有问题如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
弹性计算 缓存 测试技术
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测
阿里云ECS云服务器2核4G能支持多少人同时访问?2核4G5M并发量评测,2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素
|
11天前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
13 0
|
11天前
|
运维 监控 关系型数据库
Serverless 应用引擎产品使用之在阿里云函数计算(FC)中,要访问另一个账号的rds配置rds的白名单如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
28 0
|
2月前
|
域名解析 网络协议 应用服务中间件
阿里云DNS常见问题之域名在代理服务器上不能访问只能通过IP映射如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
弹性计算 小程序 开发者
阿里云服务器性能测评:25M带宽阿里云云服务器支持多少人访问?
在深入探讨25M带宽云服务器的性能时,我们首先要明确一个核心概念:带宽与服务器能够支持的同时访问量之间存在着直接的关联。那么,大家可能会好奇,带宽为25M的云服务器究竟能够支持多少用户同时访问呢?
137 0
|
2月前
|
存储 弹性计算 云计算
9M带宽的阿里云服务器支持多少用户并发访问?阿里云9M带宽服务器测评
随着云计算技术的飞速进步与日益完善,云服务器已经逐渐成为了众多企业与个人的首选服务器类型。它以其出色的弹性扩展、高可用性以及灵活的管理方式,赢得了广大用户的青睐。那么,对于一款拥有9M带宽的云服务器来说,到了2024年,它究竟能够支持多少用户进行并发访问呢?这无疑是许多准备使用云服务的用户非常关心的问题。
150 0
|
2月前
|
存储 域名解析 应用服务中间件
阿里云OSS对象存储,实现内网访问,免流量费用
阿里云OSS对象存储,实现内网访问,免流量费用
451 1
|
2月前
|
弹性计算 缓存 测试技术
2核4g服务器能支持多少人访问?阿里云2核4G服务器并发数测试
2核4g服务器能支持多少人访问?阿里云2核4G服务器并发数测试,2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素

热门文章

最新文章