
# 使用指南
1. 在go.mod文件中引入依赖，即引入MAS-GO-SDK。 
   ```
   github.com/huaweicloud/devcloud-go
   ```
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001261923477.png)
   
   
2. 结合[配置项说明](https://support.huaweicloud.com/devg-mas/mas-devg-0065.html)，添加配置文件或者配置信息。
   
   - 配置文件示例config_Redis.yaml
     ```
     props:
       version: v1
       appId: xxx
       monitorId: xxxx
       cloud: xxxx
       region: xxxxx
       azs: az1
     etcd:
       address: xxx.xxx.xxx.xxx:xxxx
       apiVersion: v3
       username: xxxx
       password: xxxx
       httpsEnable: false
     Redis:
       nearest: dc1
       asyncRemoteWrite:
         retryTimes: 4
       connectionPool:
         enable: true
       asyncRemotePool:
         persist: true
         threadCoreSize: 10
         taskQueueSize: 5
         persistDir: dataDir/
     servers:
       dc1:
         hosts: xxx.xxx.xxx.xxx:xxxx
         password: xxxxxx
         type: normal# cluster, master-slave, normal
         cloud: xxxx
         region: xxxxx
         azs: az1
         pool:
           maxTotal: 100
           maxIdle: 8
           minIdle: 0
           maxWaitMillis: 10000
           timeBetweenEvictionRunsMillis: 1000
       dc2:
         hosts: xxx.xxx.xxx.xxx:xxxx, xxx.xxx.xxx.xxx:xxxx
         password: xxxxxx
         type: cluster# cluster, master-slave, normal
         cloud: xxxx
         region: xxxxx
         azs: az1
         pool:
           maxTotal: 100
           maxIdle: 8
           minIdle: 0
           maxWaitMillis: 10000
           timeBetweenEvictionRunsMillis: 1000
     routeAlgorithm: single-read-write# local-read-single-write, single-read-write, double-write
     active: dc1
     ```
     
   
   - 配置信息
     ```
     func RedisConfiguration() *config.Configuration {
         return &config.Configuration{
             Props: &mas.PropertiesConfiguration{
                 Version: "v1",
                 AppID: "xxx",
                 MonitorID: "xxxx",
                 Cloud: "xxx",
                 Region: "xxxxx",
                 Azs: "az1",
             },
             EtcdConfig: &etcd.EtcdConfiguration{
                 Address: "xxx.xxx.xxx.xxx:xxxx",
                 APIVersion: "v3",
                 Username: "xxxx",
                 Password: "xxxx",
                 HTTPSEnable: false,
             },
             RedisConfig: &config.RedisConfiguration{
                 Nearest: "dc1",
                 AsyncRemoteWrite: &config.AsyncRemoteWrite{
                     RetryTimes: 4,
                 },
                 ConnectionPoolConfig: &config.RedisConnectionPoolConfiguration{
                     Enable: true,
                 },
                 AsyncRemotePoolConfiguration: &config.AsyncRemotePoolConfiguration{
                     Persist: true,
                     ThreadCoreSize: 10,
                     TaskQueueSize: 5,
                     PersistDir: "dataDir/",
                 },
                 Servers: map[string]*config.ServerConfiguration{
                     "dc1": {
                         Hosts:    "xxx.xxx.xxx.xxx:xxxx",
                         Password: "xxxxxx",
                         Type:     "normal",
                         Cloud: "xxxx",
                         Region: "xxxx",
                         Azs: "az1",
                         ConnectionPool: &config.ServerConnectionPoolConfiguration{
                             MaxTotal: 100,
                             MaxIdle: 8,
                             MinIdle: 0,
                             MaxWaitMillis: 10000,
                             TimeBetweenEvictionRunsMillis: 1000,
                         },
                     },
                     "dc2": {
                         Hosts:    "xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx",
                         Password: "xxxxxx",
                         Type:     "cluster",
                         Cloud: "xxxx",
                         Region: "xxxx",
                         Azs: "az1",
                         ConnectionPool: &config.ServerConnectionPoolConfiguration{
                             MaxTotal: 100,
                             MaxIdle: 8,
                             MinIdle: 0,
                             MaxWaitMillis: 10000,
                             TimeBetweenEvictionRunsMillis: 1000,
                         },
                     },
                 },
             },
             RouteAlgorithm: "single-read-write",
             Active:         "dc1",
         }
     }
     ```
     
   
   
   
   
3. 初始化创建DevsporeClient客户端。 
   - 配置文件方式创建
     ```
     import (
         "context"
         "log"
         "github.com/huaweicloud/devcloud-go/redis"
     )
     var (
         DevSporeClient *redis.DevsporeClient // Redis 客户端
     )
     func init() {
         DevSporeClient = redis.NewDevsporeClientWithYaml("./resources/config_Redis.yaml")
         if_, err := DevSporeClient.Ping(context.Background()).Result(); err != nil {
             log.Fatal(err)
         }
         log.Println("INFO: init redis successed.")
     }
     ```
     
   
   - 配置信息方式创建
     ```
     import (
         "context"
         "log"
         "github.com/huaweicloud/devcloud-go/redis"
     )
     var (
         DevSporeClient *redis.DevsporeClient // redis 客户端
     )
     func init() {
         DevSporeClient = redis.NewDevsporeClient(RedisConfiguration())
         if_, err := DevSporeClient.Ping(context.Background()).Result(); err != nil {
             log.Fatal(err)
         }
         log.Println("INFO: init redis successed.")
     }
     ```
     
   
   
   
   
4. 在需要执行Redis操作的地方使用DevsporeClient执行Redis操作。 
   ```
   import (
       "context"
       "demo/conf"
       "time"
       "github.com/go-redis/redis/v8"
   )
   func set(ctx context.Context, key, val string, time time.Duration) *redis.StatusCmd {
       return conf.DevSporeClient.Set(ctx, key, val, time)
   }
   func get(ctx context.Context, key string) *redis.StringCmd {
       return conf.DevSporeClient.Get(ctx, key)
   }
   ```
   
   
 
