
# Ioredis客户端连接Redis（Node.js）
本章节介绍使用ioredis客户端连接Redis实例的方法。更多的客户端的使用方法请参考[Redis客户端](https://redis.io/clients)。
以下操作以通过弹性云服务器上的客户端连接Redis实例为例进行说明。
#### 约束与限制
本章节操作，仅适用于连接单机、主备、Proxy集群实例，如果是使用ioredis客户端连接Cluster集群，请参考[NodeJs Redis客户端使用](https://github.com/NodeRedis/cluster-key-slot)。
#### 前提条件
- 已成功创建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)。
 
#### Ioredis客户端连接Redis
- Ioredis客户端连接Redis，如果客户端服务器为Ubuntu(debian系列)，请参见客户端服务器为Ubuntu(debian系列)。
- Ioredis客户端连接Redis，如果客户端服务器为centos(redhat系列)，请参见客户端服务器为centos(redhat系列)。
 
- [客户端服务器为Ubuntu(debian系列)]
  1. 查看并获取待连接Redis实例的IP地址/域名和端口。
     
     具体步骤请参见[查看和修改DCS实例基本信息](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312016.html)。
     
     
  
  2. 登录弹性云服务器。
  
  3. 安装Node.js。 
     ```
     apt install nodejs-legacy
     ```
     如果以上命令安装不了，备选方式如下：
     ```
     wget https://nodejs.org/dist/v4.28.5/node-v4.28.5.tar.gz --no-check-certificate
     tar -xvf node-v4.28.5.tar.gz
     cd node-v4.28.5
     ./configure
     make
     make install
     ```
     安装完成后，可执行**node --version**查看Node.js的版本号，确认Node.js已安装成功。
     
     
  
  4. 安装js包管理工具npm。 
     ```
     apt install npm
     ```
     
     
  
  5. 安装NodeJs redis客户端ioredis。 
     ```
     npm install ioredis
     ```
     
     
  
  6. 编辑连接Redis实例的示例脚本。 
     编辑连接示例脚本ioredisdemo.js。示例脚本中增加以下内容，包括连接以及数据读取。
     ```
     var Redis = require('ioredis');
     var redis = new Redis({
       port: 6379,          // Redis port
       host: '192.168.0.196',   // Redis host
       family: 4,           // 4 (IPv4) or 6 (IPv6)
       password: '******',
       db: 0
     }); 
     redis.set('foo', 'bar');
     redis.get('foo', function (err, result) {
       console.log(result);
     }); 
     // Or using a promise if the last argument isn't a function
     redis.get('foo').then(function (result) {
       console.log(result);
     });
     // Arguments to commands are flattened, so the following are the same:
     redis.sadd('set', 1, 3, 5, 7);
     redis.sadd('set', [1, 3, 5, 7]);
     // All arguments are passed directly to the redis server:
     redis.set('key', 100, 'EX', 10);
     ```
     其中，**host** 为Redis实例的IP地址/域名，**port** 为Redis实例的端口。IP地址/域名和端口获取见[1]，请按实际情况修改后执行。**\*\*\*\*\*\*** 为创建Redis实例时自定义的密码，请按实际情况修改后执行。如果使用实例创建的ACL账号连接，实例密码需要配置为"账号名称:账号密码"。创建或查看ACL账号，请参见[配置Redis ACL访问账号](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-221220.html)。如果实例为免密访问，则省略命令中的密码配置。
     
     
  
  7. 运行示例脚本，连接Redis实例。 
     ```
     node ioredisdemo.js
     ```
     
     
   
- [客户端服务器为centos(redhat系列)]
  1. 查看并获取待连接Redis实例的IP地址/域名和端口。
     
     具体步骤请参见[查看和修改DCS实例基本信息](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312016.html)。
     
     
  
  2. 登录弹性云服务器。
  
  3. 安装Node.js。 
     ```
     yum install nodejs
     ```
     如果以上命令安装不了，备选方式如下：
     ```
     wget https://nodejs.org/dist/v4.28.5/node-v4.28.5.tar.gz --no-check-certificate
     tar -xvf node-v4.28.5.tar.gz
     cd node-v4.28.5
     ./configure
     make
     make install
     ```
     安装完成后，可执行**node -v**查看Node.js的版本号，确认Node.js已安装成功。
     
     
  
  4. 安装js包管理工具npm。 
     ```
     yum install npm
     ```
     
     
  
  5. 安装Node.js redis客户端ioredis。 
     ```
     npm install ioredis
     ```
     
     
  
  6. 编辑连接Redis实例的示例脚本。 
     编辑连接示例脚本ioredisdemo.js。示例脚本中增加以下内容，包括连接以及数据读取。
     ```
     var Redis = require('ioredis');
     var redis = new Redis({
       port: 6379,          // Redis port
       host: '192.168.0.196',   // Redis host
       family: 4,           // 4 (IPv4) or 6 (IPv6)
       password: '******',
       db: 0
     });
     redis.set('foo', 'bar');
     redis.get('foo', function (err, result) {
       console.log(result);
     });
     // Or using a promise if the last argument isn't a function
     redis.get('foo').then(function (result) {
       console.log(result);
     }); 
     // Arguments to commands are flattened, so the following are the same:
     redis.sadd('set', 1, 3, 5, 7);
     redis.sadd('set', [1, 3, 5, 7]); 
     // All arguments are passed directly to the redis server:
     redis.set('key', 100, 'EX', 10);
     ```
     其中，**host** 为Redis实例的IP地址/域名，**port** 为Redis实例的端口。IP地址/域名和端口获取见[1]，请按实际情况修改后执行。**\*\*\*\*\*\*** 为创建Redis实例时自定义的密码，请按实际情况修改后执行。如果使用实例创建的ACL账号连接，实例密码需要配置为"账号名称:账号密码"。创建或查看ACL账号，请参见[配置Redis ACL访问账号](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-221220.html)。如果实例为免密访问，则省略命令中的密码配置。
     
     
  
  7. 运行示例脚本，连接Redis实例。 
     ```
     node ioredisdemo.js
     ```
     
     
   
#### 相关文档
如果Redis连接过程出现问题，请参见[Redis连接失败问题排查和解决](https://support.huaweicloud.com/trouble-dcs/dcs-trouble-0715001.html)。
