
# StackExchange.Redis客户端连接Redis（C#）
本章节介绍使用StackExchange.Redis客户端连接Redis实例的方法。更多的客户端的使用方法请参考[Redis客户端](https://redis.io/clients)。
以下操作以通过弹性云服务器上的客户端连接Redis实例为例进行说明。
#### 约束与限制
使用StackExchange客户端连接Proxy集群实例时，目前无法使用Proxy集群的多DB功能。
如果是Redis 7.0实例，请使用[2.6.111](https://github.com/StackExchange/StackExchange.Redis/releases/tag/2.6.111)及以上版本的hiredis客户端，推荐[2.7.0](https://github.com/StackExchange/StackExchange.Redis/blob/2.8.16/docs/ReleaseNotes.md#2710)及以上版本。
#### 前提条件
- 已成功创建Redis实例，且状态为"运行中"。创建Redis实例的操作请参考[购买Redis实例](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713002.html)。
- 已创建弹性云服务器，创建弹性云服务器的方法，请参见[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
- 如果弹性云服务器为Linux系统，该弹性云服务器必须已经安装gcc编译环境（可通过**gcc --version** 命令查询gcc版本，如果已安装gcc编译环境，会返回gcc版本）。
  如果ECS未安装gcc编译环境，以CentOS系统为例，请执行以下命令进行安装：
  ```
  yum install -y make
  yum install -y pcre-devel
  yum install -y zlib-devel
  yum install -y libevent-devel
  yum install -y openssl-devel
  yum install -y gcc-c++
  ```
  
- 连接实例前确保客户端与Redis实例之间网络互通，具体请参考[连接Redis网络要求](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312007.html)。
 
#### StackExchange.Redis客户端连接Redis
1. 查看并获取待连接Redis实例的IP地址/域名和端口。
   
   具体步骤请参见[查看和修改DCS实例基本信息](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312016.html)。
   
   
2. 登录弹性云服务器。 
   弹性云服务器操作系统，这里以Windows为例。
   
   
3. 在弹性云服务器安装VS 2017社区版。
4. 启动VS 2017，新建一个工程。 
   工程名自定义，这里设置为"redisdemo"。
   
   
5. 使用VS的nuget管理工具安装C# Redis客户端StackExchange.Redis。 
   按照如[图1]操作，进入程序包管理器控制台，在nuget控制台输入：**Install-Package StackExchange.Redis** *-Version 2.2.79*。（版本号可以不指定）
   图1进入程序包管理器控制台   
   ![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0148195318.png "点击放大")
   
   
6. 编写如下代码，并使用String的set和get测试连接。 
   ```
   using System;
   using StackExchange.Redis;
   namespace redisdemo
   {
       class Program
       {
           // redis config
           private static ConfigurationOptions connDCS = ConfigurationOptions.Parse("{instance_ip_address}:{port},password=********,connectTimeout=2000");
           //the lock for singleton
           private static readonly object Locker = new object();
           //singleton
           private static ConnectionMultiplexer redisConn;
           //singleton
           public static ConnectionMultiplexer getRedisConn()
           {
               if (redisConn == null)
               {
                   lock (Locker)
                   {
                       if (redisConn == null || !redisConn.IsConnected)
                       {
                           redisConn = ConnectionMultiplexer.Connect(connDCS);
                       }
                   }
               }
               return redisConn;
           }
           static void Main(string[] args)
           {
               redisConn = getRedisConn();
               var db = redisConn.GetDatabase();
               //set get
               string strKey = "Hello";
               string strValue = "DCS for Redis!";
               Console.WriteLine( strKey + ", " + db.StringGet(strKey));
               Console.ReadLine();
           }
       }
   }
   ```
   其中，{instance_ip_address}和{port}分别为Redis实例的IP地址/域名以及端口。IP地址/域名和端口获取见[1]，请按实际情况修改后执行。*\*\*\*\*\*\*\*\** 为创建Redis实例时自定义的密码，请按实际情况修改后执行。如果使用实例创建的ACL账号连接，实例密码需要配置为"账号名称:账号密码"。创建或查看ACL账号，请参见[配置Redis ACL访问账号](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-221220.html)。如果实例为免密访问，则省略命令中的密码配置。
   
   
7. 运行代码，控制台界面输出如下，表示连接成功。 
   ```
   Hello, DCS for Redis!
   ```
   关于客户端的其他命令，可以参考[StackExchange.Redis](https://stackexchange.github.io/StackExchange.Redis/)。
   
   
 
#### 相关文档
如果Redis连接过程出现问题，请参见[Redis连接失败问题排查和解决](https://support.huaweicloud.com/trouble-dcs/dcs-trouble-0715001.html)。
