
# 通过C#语言连接GeminiDB Redis实例
本章节主要介绍使用C# 语言访问GeminiDB Redis实例的方法。
#### 前提条件
- 已成功创建GeminiDB Redis实例，且实例状态为"正常"。
- 已创建弹性云服务器，创建弹性云服务器的方法，请参见《弹性云服务器》中"[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)"章节。
- 弹性云服务器上已经安装GCC等编译工具。
- 创建的弹性云服务器与GeminiDB Redis实例要保证区域、可用区、VPC和安全组一致。
 
#### 操作步骤
1. 获取GeminiDB Redis实例的负载均衡地址和端口信息。 
   - 负载均衡地址和端口信息的查看方法请参见查看[查看负载均衡地址及端口](https://support.huaweicloud.com/redisug-nosql/nosql_10_0004.html#nosql_10_0004__section63651335916)。
   
   - 各实例地址的查看方法请参见查看[查看内网IP地址](https://support.huaweicloud.com/redisug-nosql/nosql_10_0004.html#nosql_10_0004__section363221714366)。
   
   
   
   
2. 登录弹性云服务器，具体操作请参见《弹性云服务器》中"[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)"。
3. 安装.Net。Windows主机前往进入[.NET官网](https://dotnet.microsoft.com/)下载，Linux主机需要安装 .NET Core 的密钥和存储库，再安装.Net运行时和SDK：
   
   ```
   sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm
   sudo yum install dotnet-sdk-7.0
   sudo yum install dotnet-runtime-7.0
   ```
   运行
   ```
   dotnet --version
   ```
   您将会看到您的.Net版本信息。
   
   
4. 使用StackExchange.Redis客户端连接GeminiDB Redis实例。 
   - 创建项目 在命令行窗口中运行以下命令创建一个新的C#控制台应用程序；或者在Visual Studio中创建一个新的C#控制台应用程序。
     ```
     dotnet new console -o redisdemo
     ```
     
   
   
   
   - 安装Redis的C#客户端 StackExchange.Redis包。Visual Studio中您可以从NuGet包管理器中安装StackExchange.Redis。或者dotnet项目所在的命令行窗口，运行以下命令：
     ```
     dotnet add package StackExchange.Redis
     ```
     
   
   
   
   - 使用单机方式连接GeminiDB Redis
     ```
     using System;
     using StackExchange.Redis;  
     namespace redisdemo
     {
         class Program
         {
             static void  Main(string[] args)
             {
                 // 创建一个连接到Redis服务器的ConnectionMultiplexer对象
                 string redisConnectionString = " 192.xx.xx.xx:6379"; // 步骤1获取到的负载均衡地址
                 ConfigurationOptions options = ConfigurationOptions.Parse(redisConnectionString);
                 // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全；
                 // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
                 string password = Environment.GetEnvironmentVariable("EXAMPLE_PASSWORD_ENV");
                 options.Password = password; 
                 ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(options);
      
                 // 获取Redis数据库对象
                 IDatabase redisDb = redis.GetDatabase();
      
                 // 设置一个键值对
                 string key = "mykey";
                 string value = "myvalue";
                 redisDb.StringSet(key, value);
                 string valueGet = redisDb.StringGet(key);
                 Console.WriteLine($"键 {key} 对应的值为：{valueGet}");
             }
         }
     }
     ```
     
   
   
   预期输出
   ```
   键 mykey 对应的值为：myvalue
   ```
   - 使用集群方式连接GeminiDB Redis集群
     ```
     using System;
     using StackExchange.Redis;
     namespace redisdemo
     {
         class Program
         {
             static void  Main(string[] args)
             {
                     ConfigurationOptions options = new ConfigurationOptions();
                     options.EndPoints.Add("192.xx.xx.xx:6379"); // 步骤1获得的实例集群节点1的地址和端口号
                     options.EndPoints.Add("192.xx.xx.xx:6379"); // 步骤1获得的实例集群节点2的地址和端口号               
                     options.Password = "your_password"; // 设置密码
                     ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(options);
                     // 获取Redis数据库对象
                     IDatabase redisDb = redis.GetDatabase();
                     // 设置一个键值对
                     string key = "mykey";
                     string value = "myvalue";
                     redisDb.StringSet(key, value);
                     string valueGet = redisDb.StringGet(key);
                     Console.WriteLine($"键 {key} 对应的值为：{valueGet}");
             }
         }
     }
     ```
     
   
   
   预期输出
   ```
   键 mykey 对应的值为：myvalue
   ```
   
   
 
