云数据库Redis与原生Redis完全兼容,连接数据库的方式也基本相同,您可以根据自身应用特点选用任何兼容Redis协议的客户端程序。本文列举一些常见的客户端程序的代码示例,帮助您快速连接。

前提条件

根据客户端程序的部署位置,完成下述操作:
客户端程序部署位置 需完成的操作
ECS实例(推荐)
  1. 确保ECS实例与Redis实例属于同一专有网络(即实例基本信息中的专有网络ID一致)。
    说明
  2. 获取ECS实例的内网IP地址。具体操作,请参见查询ECS实例的IP地址
  3. 将ECS实例的内网IP地址添加至Redis实例的白名单中。具体操作,请参见设置白名单
本地
  1. Redis实例默认仅提供内网连接地址,通过公网连接时您需要手动申请公网连接地址。具体操作,请参见申请公网连接地址
  2. 在本地客户端所属的设备上执行curl ipinfo.io |grep ip获取其公网IP地址,返回示例如下:查看公网IP结果
    说明 如果本地客户端所属设备为Windows操作系统,您可以访问淘宝IP地址库获取公网地址。
  3. 将本地客户端的公网IP地址添加至Redis实例的白名单中。具体操作,请参见设置白名单

注意事项

  • 如果您的Redis实例为集群架构读写分离架构,实例默认会提供Proxy(代理)节点的连接地址,连接方式与连接标准架构的Redis实例相同。
    说明 集群架构的实例通过直连地址连接时,连接方式与连接开源Redis Cluster相同。
  • 如果实例开启了专有网络免密访问,同一专有网络下的客户端程序无需设置密码即可连接Redis实例。

如何获取连接信息

在使用客户端程序连接Redis实例时,通常您需要获取以下信息并设置在代码中:

需获取的信息 获取方式
实例的连接地址 Redis实例支持多种连接地址,推荐使用专有网络连接,可获得更高的安全性和更低的网络延迟。更多信息,请参见查看连接地址
端口号 端口号默认为6379,您也可以自定义端口号。具体操作,请参见修改连接地址或端口
实例的账号(部分客户端程序无需设置) Redis实例默认会创建一个以实例ID命名的账号(例如r-bp10noxlhcoim2****),您也可以创建一个新的账号并赋予权限。更多信息,请参见创建与管理账号
账号的密码

根据选取账号的不同,密码的填写格式有一定区别:

  • 默认账号(以实例ID命名的账号):直接填写密码即可。
  • 新创建的账号:密码格式为<user>:<password>。例如自定义账号为testaccount,密码为Rp829dlwa,密码需填写为testaccount:Rp829dlwa
说明
  • 如果通过第三方数据库管理工具(例如RDM等)连接Redis实例,请在密码框中输入user:password进行连接。
  • 如果忘记密码,您可以重置密码。具体操作,请参见修改或重置密码

常见客户端程序

关于Redis支持的客户端列表,请参见Redis Clients

Jedis客户端

说明 企业版(性能增强型)推荐使用TairJedis客户端
  1. 下载并安装Jedis客户端。具体操作,请参见Jedis使用说明
  2. 根据业务需求选择连接方式。
    1. 打开Eclipse客户端,创建一个Project并配置pom文件,具体内容如下:
      <dependency>
         <groupId>redis.clients</groupId>
         <artifactId>jedis</artifactId>
         <version>Latest non-RC version</version>
         <type>jar</type>
         <scope>compile</scope>
      </dependency>
      说明 最新版本,请参见Jedis
    2. 根据Jedis客户端版本,在Project中输入下述代码,然后根据注释提示修改代码。
      说明 关于如何获取Redis实例的连接地址和密码,请参见如何获取连接信息
      JedisPoolConfig config = new JedisPoolConfig();
      // 最大空闲连接数,需自行评估,不超过Redis实例的最大连接数
      config.setMaxIdle(200);
      // 最大连接数,需自行评估,不超过Redis实例的最大连接数。
      config.setMaxTotal(300);
      config.setTestOnBorrow(false);
      config.setTestOnReturn(false);
      // 分别将host和password的值替换为实例的连接地址、密码。
      String host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
      String password = "testaccount:Rp829dlwa";
      JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
      Jedis jedis = null;
      try
      {
          jedis = pool.getResource();
          /// ... do stuff here ... for example
          jedis.set("foo", "bar");
          System.out.println(jedis.get("foo"));
          jedis.zadd("sose", 0, "car");
          jedis.zadd("sose", 0, "bike");
          System.out.println(jedis.zrange("sose", 0, -1));
      }
      finally
      {
          if(jedis != null)
          {
              jedis.close();
          }
      }
      /// ... when closing your application:
      pool.destroy();
      JedisPoolConfig config = new JedisPoolConfig();
      // 最大空闲连接数,需自行评估,不超过Redis实例的最大连接数
      config.setMaxIdle(200);
      // 最大连接数,需自行评估,不超过Redis实例的最大连接数
      config.setMaxTotal(300);
      config.setTestOnBorrow(false);
      config.setTestOnReturn(false);
      // 分别将host和password的值替换为实例的连接地址、密码
      String host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
      String password = "testaccount:Rp829dlwa";
      JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
      Jedis jedis = null;
      boolean broken = false;
      try
      {
          jedis = pool.getResource();
          /// ... do stuff here ... for example
          jedis.set("foo", "bar");
          String foobar = jedis.get("foo");
          jedis.zadd("sose", 0, "car");
          jedis.zadd("sose", 0, "bike");
          Set < String > sose = jedis.zrange("sose", 0, -1);
      }
      catch(Exception e)
      {
          broken = true;
      }
      finally
      {
          if(broken)
          {
              pool.returnBrokenResource(jedis);
          }
          else if(jedis != null)
          {
              pool.returnResource(jedis);
          }
      }
      import redis.clients.jedis.Jedis;
      public class jedistest {
      public static void main(String[] args) {
      try {
           String host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";//实例的连接地址
           int port = 6379;
           Jedis jedis = new Jedis(host, port);
           //鉴权信息
           jedis.auth("password");//password
           String key = "redis";
           String value = "aliyun-redis";
           //select db默认为0
           jedis.select(1);
           //set一个key
           jedis.set(key, value);
           System.out.println("Set Key " + key + " Value: " + value);
           //get 设置进去的key
           String getvalue = jedis.get(key);
           System.out.println("Get Key " + key + " ReturnValue: " + getvalue);
           jedis.quit();
           jedis.close();
      } 
      catch (Exception e) {
       e.printStackTrace();
       }
      }
      }
  3. 运行上述Project,在Eclipse的控制台输出如下运行结果则表示您已成功连接至云数据库Redis。
    bar
    [bike, car]
警告 在使用Jedis的过程中,如果设置了一些不合理的参数或错误使用某些功能可能会引起报错,关于如何排查,请参见Jedis常见异常汇总

TairJedis客户端

TairJedis是阿里云基于Jedis开发的Redis企业版专用客户端,除了Jedis的原有功能,还支持Redis企业版数据结构模块包含的命令

说明 关于如何获取Redis实例的连接地址和密码,请参见如何获取连接信息

更多信息,请参见tairjedis-sdk

PhpRedis客户端

  1. 下载并安装PhpRedis客户端。具体操作,请参见PhpRedis使用说明
  2. 在PHP编辑器中输入下述代码,然后根据注释提示修改代码。
    <?php
     /* 分别将host和port的值替换为实例的连接地址、端口号。 */
     $host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
     $port = 6379;
     /* 分别将user和pwd的值替换为实例的账号和密码 */
     $user = "testaccount";
     $pwd = "Rp829dlwa";
     $redis = new Redis();
     if ($redis->connect($host, $port) == false) {
             die($redis->getLastError());
       }
     if ($redis->auth($pwd) == false) {
             die($redis->getLastError());
      }
      /* 完成认证后可执行数据库操作,下述代码为您提供SET与GET的使用示例。 */
     if ($redis->set("foo", "bar") == false) {
             die($redis->getLastError());
     }
     $value = $redis->get("foo");
     echo $value;
     ?>
    <?php
     /* 分别将host和port的值替换为实例的连接地址、端口号。 */
     $host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
     $port = 6379;
     /* 分别将user和pwd的值替换为实例的账号和密码 */
     $user = "test_username";
     $pwd = "password";
     $redis = new Redis();
     if ($redis->connect($host, $port) == false) {
             die($redis->getLastError());
       }
     if ($redis->auth($pwd) == false) {
             die($redis->getLastError());
      }
      /* 完成认证后可执行数据库操作,下述代码为您提供数据结构模块(如TairString)的使用示例。 */
     if ($redis->set("foo", "bar") == false) {
             die($redis->getLastError());
     }
     /* Returns: 1 */
     $redis->rawCommand("CAS", "foo", "bar", "bzz");
     /* Returns: 1 */
     $redis->rawCommand("CAD", "foo", "bzz");
     /* Returns: OK */
     $redis->rawCommand("EXSET", "foo", "200", "VER", "1");
     /* ERR update version is stale */
     $redis->rawCommand("EXSET", "foo", "300", "VER", "10");
     /* Returns : ["OK", " ", VERSION] */
     $redis->rawCommand("EXCAS", "foo", "300", "1");
     ?>
    说明
  3. 执行上述代码。
    更多信息,请参见官方文档
说明 如果遇到客户端程序提示错误:Cannot assign requested address,原因分析及排查方法,请参见使用短连接访问Redis出现“Cannot assign requested address”错误

redis-py客户端

  1. 下载并安装redis-py客户端。具体操作,请参见redis-py使用说明
  2. 在Python编辑器中输入下述代码(Python 2版本),然后根据注释提示修改代码。
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    import redis
    #分别将host和port的值替换为实例的连接地址、端口号。
    host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
    port = 6379
    #将pwd的值替换为实例的密码。
    pwd = 'testaccount:Rp829dlwa'
    r = redis.StrictRedis(host=host, port=port, password=pwd)
    #连接建立后即可执行数据库操作,下述代码为您提供SET与GET的使用示例。
    r.set('foo', 'bar');
    print r.get('foo')
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    import redis
    #分别将host和port的值替换为实例的连接地址、端口号。
    host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
    port = 6379
    #将pwd的值替换为实例的密码。
    pwd = 'testaccount:Rp829dlwa'
    r = redis.StrictRedis(host=host, port=port, password=pwd)
    #连接建立后即可执行数据库操作,下述代码为您提供数据结构模块(如TairString)的使用示例。
    print(r.execute_command('CAS foo bar bzz'))
    print(r.execute_command('CAD foo bzz'))
    print(r.execute_command('EXSET foo 200 VER 1'))
    try:
        r.execute_command('EXSET foo 300 VER 10')
    except:
        print("The attached version is different from the server version, the operation will fail. ")
    print(r.execute_command('EXCAS foo 300 1'))
    说明
  3. 执行上述代码。

Spring Data Redis客户端

  1. 下载并安装Spring Data Redis客户端。
  2. 在Spring Data Redis编辑器中输入下述代码,然后根据注释提示修改代码。
    @Bean
         JedisConnectionFactory redisConnectionFactory() {
             RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("host", port);
     
             JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
             // 最大连接数, 根据业务需要设置,不能超过实例规格规定的最大连接数。
             jedisPoolConfig.setMaxTotal(30);
             // 最大空闲连接数, 根据业务需要设置,不能超过实例规格规定的最大连接数。
             jedisPoolConfig.setMaxIdle(20);
             // 关闭 testOn[Borrow|Return],防止产生额外的PING。
             jedisPoolConfig.setTestOnBorrow(false);
             jedisPoolConfig.setTestOnReturn(false);
     
             JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder().usePooling().poolConfig(
                 jedisPoolConfig).build();
     
             return new JedisConnectionFactory(config, jedisClientConfiguration);
         }
        @Bean
        LettuceConnectionFactory redisConnectionFactory() {
            RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("host", 6379);
            return new LettuceConnectionFactory(config);
        }
    说明
    • 关于如何获取Redis实例的连接地址和密码,请参见如何获取连接信息
    • Spring Data Redis 2.0版本后默认使用Lettuce作为驱动,如您希望切换至Jedis,需要排除Lettuce并主动引入Jedis依赖,示例如下:
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
          <exclusions>
              <exclusion>
                  <artifactId>lettuce-core</artifactId>
                  <groupId>io.lettuce</groupId>
              </exclusion>
          </exclusions>
      </dependency>
      
      <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>Latest non-RC version</version>
      </dependency>
  3. 执行上述代码。
    更多信息,请参见Spring Data Redis

C或C++客户端

  1. 执行下述命令,下载并编译安装C客户端。
    git clone https://github.com/redis/hiredis.git
    cd hiredis
    make
    sudo make install
  2. 在C或C++编辑器中输入下述代码,然后根据注释提示修改代码。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <hiredis.h>
    int main(int argc, char **argv) {
        unsigned int j;
        redisContext *c;
        redisReply *reply;
        if (argc < 4) {
                printf("Usage: example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 instance_id password\n");
                exit(0);
        }
        const char *hostname = argv[1];
        const int port = atoi(argv[2]);
        const char *instance_id = argv[3];
        const char *password = argv[4];
        struct timeval timeout = { 1, 500000 }; // 1.5 seconds
        c = redisConnectWithTimeout(hostname, port, timeout);
        if (c == NULL || c->err) {
        if (c) {
                printf("Connection error: %s\n", c->errstr);
                redisFree(c);
        } else {
            printf("Connection error: can't allocate redis context\n");
        }
        exit(1);
        }
        /* AUTH */
        reply = redisCommand(c, "AUTH %s", password);
        printf("AUTH: %s\n", reply->str);
        freeReplyObject(reply);
        /* PING server */
        reply = redisCommand(c,"PING");
        printf("PING: %s\n", reply->str);
        freeReplyObject(reply);
        /* Set a key */
        reply = redisCommand(c,"SET %s %s", "foo", "hello world");
        printf("SET: %s\n", reply->str);
        freeReplyObject(reply);
        /* Set a key using binary safe API */
        reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
        printf("SET (binary API): %s\n", reply->str);
        freeReplyObject(reply);
        /* Try a GET and two INCR */
        reply = redisCommand(c,"GET foo");
        printf("GET foo: %s\n", reply->str);
        freeReplyObject(reply);
        reply = redisCommand(c,"INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
        /* again ... */
        reply = redisCommand(c,"INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
        /* Create a list of numbers, from 0 to 9 */
        reply = redisCommand(c,"DEL mylist");
        freeReplyObject(reply);
        for (j = 0; j < 10; j++) {
                char buf[64];
                snprintf(buf,64,"%d",j);
                reply = redisCommand(c,"LPUSH mylist element-%s", buf);
                freeReplyObject(reply);
            }
        /* Let's check what we have inside the list */
        reply = redisCommand(c,"LRANGE mylist 0 -1");
        if (reply->type == REDIS_REPLY_ARRAY) {
                for (j = 0; j < reply->elements; j++) {
                printf("%u) %s\n", j, reply->element[j]->str);
        }
        }
        freeReplyObject(reply);
        /* Disconnects and frees the context */
        redisFree(c);
        return 0;
    }
    #include <iostream>
    #include <string>
    #include <string.h>
    #include <hiredis/hiredis.h>
    using namespace std;
     
    int main(int argc, char **argv) {
        unsigned int j;
        redisContext *c;
        redisReply *reply;
        if (argc < 3) {
                printf("Usage: example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 password\n");
                exit(0);
        }
        const char *hostname = argv[1];
        const int port = atoi(argv[2]);
        const char *password = argv[3];
        struct timeval timeout = { 1, 500000 }; // 1.5 seconds
        c = redisConnectWithTimeout(hostname, port, timeout);
        if (c == NULL || c->err) {
        if (c) {
                printf("Connection error: %s\n", c->errstr);
                redisFree(c);
        } else {
                printf("Connection error: can't allocate redis context\n");
        }
        exit(1);
        }
        /* AUTH */
        reply = (redisReply *)redisCommand(c, "AUTH %s", password);
        printf("AUTH: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* PING server */
        reply = (redisReply *)redisCommand(c,"PING");
        printf("PING: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* 下述代码为您提供数据结构模块(如TairString)的使用方法 */
        reply = (redisReply *)redisCommand(c,"SET foo bar");
        printf("SET: %s\n", reply->str);
        freeReplyObject(reply);
    
        reply = (redisReply *)redisCommand(c,"CAS foo bar bzz");
        printf("CAS: %lld\n", reply->integer);
        freeReplyObject(reply);
    
        reply = (redisReply *)redisCommand(c,"CAD foo bzz");
        printf("CAD: %lld\n", reply->integer);
        freeReplyObject(reply);
    
        /* TairString exstrtype */
        reply = (redisReply *)redisCommand(c,"EXSET foo 200 VER 1");
        printf("EXSET: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* The attached version is different from the server version, the operation will fail */
        reply = (redisReply *)redisCommand(c,"EXSET foo 300 VER 10");
        printf("EXSET: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* Compare the specified version to update the value, and the update is successful
        when the version in the engine is the same as the specified one */
        reply = (redisReply *)redisCommand(c,"EXCAS foo 300 1");
        if (reply->type == REDIS_REPLY_ARRAY) {
            /* ["OK", "", version], The middle value is an empty string, meaningless when successful */
            for (j = 0; j < reply->elements; j++) {
                printf("%u) %s\n", j, reply->element[j]->str);
            }
        }
        freeReplyObject(reply);
    
        /* Disconnects and frees the context */
        redisFree(c);
        return 0;
    }
    说明
  3. 编译上述代码。
    gcc -o example -g example.c -I /usr/local/include/hiredis -lhiredis
  4. 测试运行,完成连接。
     example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 instance_id password

.net客户端

警告 如果您的Redis实例为集群架构读写分离架构,且需要执行切换或选择数据库的操作(即使用多数据库功能),您必须先将cluster_compat_enable参数设置为0(即关闭原生Redis Cluster语法兼容),然后重启客户端应用,否则将提示报错: Multiple databases are not supported on this server; cannot switch to database。具体操作,请参见设置实例参数
  1. 下载并安装StackExchange.Redis
  2. 根据提示修改下述示例代码。
    using StackExchange.Redis;
     // 分别设置实例的连接地址、端口号和密码。
     private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,password=testaccount:Rp829dlwa,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(configurationOptions);
                 }
             }
         }
         return redisConn;
     }
    using System;
    using StackExchange.Redis;
    
    namespace CSharpTestRedis
    {
        class Program
        {  
            // 分别设置实例的连接地址、端口号和密码。
    		private static ConfigurationOptions connDCS = ConfigurationOptions.Parse("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,password=testaccount:Rp829dlwa");
            //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();
    
                var ret = db.Execute("set", "foo", "bal");
                Console.WriteLine("set " + ret);
                ret = db.Execute("CAS", "foo", "bal", "bzz");
                Console.WriteLine("CAS " + ret);
                ret = db.Execute("CAD", "foo", "bzz");
                Console.WriteLine("CAD " + ret);
                ret = db.Execute("EXSET", "foo", "200", "VER", "1");
                Console.WriteLine("EXSET " + ret);
                
                try {
                    ret = db.Execute("EXSET", "foo", "300", "VER", "10");
                    Console.WriteLine("EXSET " + ret);
                } catch (Exception ex) {
                    Console.WriteLine("ERR : " + ex.ToString());
                }
                // ["OK", "", version], The middle value is an empty string, meaningless when successful.
                db.Execute("EXCAS", "foo", "300", "1");
                Console.WriteLine("END");
            }
        }
    }
    说明
    • 关于如何获取Redis实例的连接地址和密码,请参见如何获取连接信息
    • 对于企业版(性能增强型)实例,您可以单击上方的企业版Tair示例页签,查看数据结构模块(如TairString)的使用示例。关于数据结构模块的相关介绍,请参见Tair扩展数据结构的命令
    • ConfigurationOptions是StackExchange.Redis的核心,它被整个应用程序共享和重用,应该设置为单例,相关参数设置说明,请参见ConfigurationOptions
    • 由于GetDatabase()返回的对象是轻量级的,每次用的时候从ConnectionMultiplexer对象中获取即可。
       redisConn = getRedisConn();
       var db = redisConn.GetDatabase();
  3. 通过客户端程序操作常见的数据结构(和原生API略有不同)。
    //set get
    string strKey = "hello";
    string strValue = "world";
    bool setResult = db.StringSet(strKey, strValue);
    Console.WriteLine("set " + strKey + " " + strValue + ", result is " + setResult);
    //incr
    string counterKey = "counter";
    long counterValue = db.StringIncrement(counterKey);
    Console.WriteLine("incr " + counterKey + ", result is " + counterValue);
    //expire
    db.KeyExpire(strKey, new TimeSpan(0, 0, 5));
    Thread.Sleep(5 * 1000);
    Console.WriteLine("expire " + strKey + ", after 5 seconds, value is " + db.StringGet(strKey));
    //mset mget
    KeyValuePair<RedisKey, RedisValue> kv1 = new KeyValuePair<RedisKey, RedisValue>("key1", "value1");
    KeyValuePair<RedisKey, RedisValue> kv2 = new KeyValuePair<RedisKey, RedisValue>("key2", "value2");
    db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {kv1,kv2});            
    RedisValue[] values = db.StringGet(new RedisKey[] {kv1.Key, kv2.Key});
    Console.WriteLine("mget " + kv1.Key.ToString() + " " + kv2.Key.ToString() + ", result is " + values[0] + "&&" + values[1]);
    string hashKey = "myhash";
    //hset
    db.HashSet(hashKey,"f1","v1");
    db.HashSet(hashKey,"f2", "v2");
    HashEntry[] values = db.HashGetAll(hashKey);
    //hgetall
    Console.Write("hgetall " + hashKey + ", result is");
    for (int i = 0; i < values.Length;i++) 
    {
      HashEntry hashEntry = values[i];
      Console.Write(" " + hashEntry.Name.ToString() + " " + hashEntry.Value.ToString());
    }
    Console.WriteLine();
    //list key
    string listKey = "myList";
    //rpush
    db.ListRightPush(listKey, "a");
    db.ListRightPush(listKey, "b");
    db.ListRightPush(listKey, "c");
    //lrange
    RedisValue[] values = db.ListRange(listKey, 0, -1);
    Console.Write("lrange " + listKey + " 0 -1, result is ");
    for (int i = 0; i < values.Length; i++)
    {
     Console.Write(values[i] + " ");
    }
    Console.WriteLine();
    //set key
    string setKey = "mySet";
    //sadd
    db.SetAdd(setKey, "a");
    db.SetAdd(setKey, "b");
    db.SetAdd(setKey, "c");
    //sismember
    bool isContains = db.SetContains(setKey, "a");
    Console.WriteLine("set " + setKey + " contains a is " + isContains );
    string sortedSetKey = "myZset";
    //sadd
    db.SortedSetAdd(sortedSetKey, "xiaoming", 85);
    db.SortedSetAdd(sortedSetKey, "xiaohong", 100);
    db.SortedSetAdd(sortedSetKey, "xiaofei", 62);
    db.SortedSetAdd(sortedSetKey, "xiaotang", 73);
    //zrevrangebyscore
    RedisValue[] names = db.SortedSetRangeByRank(sortedSetKey, 0, 2, Order.Ascending);
    Console.Write("zrevrangebyscore " + sortedSetKey + " 0 2, result is ");
    for (int i = 0; i < names.Length; i++)
    {
      Console.Write(names[i] + " ");
    }
    Console.WriteLine();

node-redis客户端

  1. 下载并安装node-redis。
    npm install hiredis redis
  2. 在node-redis客户端中输入下述代码,然后根据注释提示修改代码。
    var redis = require("redis"),
    // 分别设置实例的端口号和连接地址。
    client = redis.createClient(6379, "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", {detect_buffers: true});
    //  设置实例的密码。
    client.auth("testaccount:Rp829dlwa", redis.print)
    // 写入数据。
    client.set("key", "OK");
    // 获取数据,返回String。
    client.get("key", function (err, reply) {
    console.log(reply.toString()); // print `OK`
    });
    // 如果传入一个Buffer,返回也是一个Buffer。
    client.get(new Buffer("key"), function (err, reply) {
    console.log(reply.toString()); // print `<Buffer 4f 4b>`
    });
    client.quit();
    var redis = require("redis");
    // 分别将host和port的值替换为实例的连接地址和端口。
    var client = redis.createClient({host : 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com', port : 6379});
    // 设置实例的密码。
    client.auth("testaccount:Rp829dlwa", redis.print)
    
    client.set("foo", "bar");
    client.get("foo", function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log(reply.toString()); // print `OK`
        }
    });
    // 如果传入一个Buffer,返回也是一个Buffer。
    client.get(new Buffer("foo"), function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log(reply.toString()); // print `<Buffer 4f 4b>`
        }
    });
    
    // 下述代码为您提供数据结构模块(如TairString)的使用示例。
    client.sendCommand('CAS', ['foo', 'bar', 'bzz'], function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log('CAS : %s', reply.toString());
        }
    });
    
    client.sendCommand('CAD', ['foo', 'bzz'], function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log('CAD : %s', reply.toString());
        }
    });
    
    client.sendCommand('EXSET', ['foo', '200', 'VER', '1'], function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log('EXSET : %s', reply.toString());
        }
    });
    
    client.sendCommand('EXSET', ['foo', '300', 'VER', '10'], function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log('EXSET : %s', reply.toString());
        }
    });
    
    client.sendCommand('EXCAS', ['foo', '300', '1'], function (err, reply) {
        if (err) {
            console.log(err);
        } else {
            console.log('EXCAS : %s', reply.toString()); // print `<Buffer 4f 4b>`
        }
    });
    
    client.quit();
    说明
  3. 执行上述代码。

Go-redis客户端

package main

import (
	"github.com/go-redis/redis"
	"fmt"
)

func ExampleClient() {
	client := redis.NewClient(&redis.Options{
        // 替换为实例的连接地址和端口
		Addr:     "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379",
        // 替换为实例的密码
		Password: "testaccount:Rp829dlwa",
		DB:       0,  // use default DB
	})
    // 下述代码为您提供SET与GET的使用示例。
	err := client.Set("foo", "bar", 0).Err()
	if err != nil {
		panic(err)
	}

	val, err := client.Get("foo").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("set : foo -> ", val)
}

func main() {
	ExampleClient()
}
package main

import (
	"github.com/go-redis/redis"
	"fmt"
)

func ExampleClient() {
	client := redis.NewClient(&redis.Options{
        // 替换为实例的连接地址和端口
		Addr:     "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379",
        // 替换为实例的密码
		Password: "testaccount:Rp829dlwa", // no password set
		DB:       0,  // use default DB
	})

	err := client.Set("foo", "bar", 0).Err()
	if err != nil {
		panic(err)
	}

	val, err := client.Get("foo").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("set : foo -&gt; ", val)
	
	// 下述代码为您提供数据结构模块(如TairString)的使用示例
	res, err := client.Do("CAS", "foo", "bar", "bzz").Result()
	fmt.Println("CAS : ", res)

	res, err = client.Do("CAD", "foo", "bzz").Result()
	fmt.Println("CAD : ", res)

	res, err = client.Do("EXSET", "foo", "200", "VER", "1").Result()
	fmt.Println("EXSET : ", res)

	res, err = client.Do("EXSET", "foo", "300", "VER", "10").Result()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("EXSET : ", res)

	res, err = client.Do("EXCAS", "foo", "300", "1").Result()
	fmt.Println("EXCAS : ", res)
}

func main() {
	ExampleClient()
}
说明

Lettuce客户端

Lettuce支持完整Redis API的同步和异步通信使用。由于Lettuce客户端在请求多次请求超时后,不再自动重连,当云数据库Redis因故障等因素导致代理或者数据库节点发生切换时,可能出现连接超时导致无法重连。为避免此类风险,推荐您使用Jedis客户端

说明 关于如何获取Redis实例的连接地址和密码,请参见如何获取连接信息

更多信息,请参见Lettuce