注意:以下文档只适用于TOP接口,请谨慎使用!

聚石塔数据缓存Redis版服务使用

更新时间:2016/03/31 访问次数:7037

订购云数据库REDIS版服务

登录至聚石塔首页(http://cloud.tmall.com),选择“产品与服务”下的“云数据库redis版”,点击马上使用申请试用.

提交申请试用,审核通过后将通过手机短信、邮件、旺旺提醒等方式通知用户已拥有开通redis服务权限,即可购买redis服务. 

云数据库REDIS版使用指南

导入redis数据 

redis-cli是Redis原生的命令行工具。AliCloudDB for Redis支持用户通过redis-cli来导入数据,方便用户将已有的Redis数据导入到AliCloudDB for Redis里,实现数据的无缝迁移。

操作方案

对于自建的Redis实例,执行如下操作:

1.开启用户现有Redis实例的AOF功能(如果实例已经启用AOF功能则忽略此步骤):

# redis-cli -h old_instance_ip -p old_instance_port config set appendonly yes

2.通过AOF文件将数据导入到新的AliCloudDB for Redis实例 (假定生成的AOF文件名为append.aof):

# redis-cli -h aliyun_redis_instance_ip -p 6379 -a instance_id:password --pipe < appendonly.aof

注意事项

1.由于AliCloudDB for Redis仅支持从阿里云内网访问,所以此操作方案仅在阿里云ECS上执行才生效。 若用户的Redis不在阿里云ECS服务器上,用户需要将原有的AOF文件复制到ECS上再执行以上操作;

2.redis-cli是Redis原生的命令行工具。若用户在ECS上无法使用redis-cli,可以先下载安装Redis即可使用redis-cli);

3.如果原有旧的Redis实例不需要一直开启AOF,可在导入完成后通过以下命令关闭;

# redis-cli -h old_instance_ip -p old_instance_port config set appendonly no

AliCloudDB for Redis支持的Redis命令 

任何兼容Redis协议的客户端都可以访问阿里云AliCloudDB for Redis服务,用户可以根据自身应用特点选用任何Redis客户端。阿里云AliCloudDB for Redis兼容Redis的v2.8.19版本。

AliCloudDB for Redis支持如下的Redis命令操作:

Key(键) String(字符串) Hash(哈希表) List(列表) Set(集合) SortedSet(有序集合)
DEL APPEND HDEL BLPOP SADD ZADD
DUMP BITCOUNT HEXISTS BRPOP SCARD ZCARD
EXISTS BITOP HGET BRPOPLPUSH SDIFF ZCOUNT
EXPIRE BITPOS HGETALL LINDEX SDIFFSTORE ZINCRBY
EXPIREAT DECR HINCRBY LINSERT SINTER ZRANGE
MOVE DECRBY HINCRBYFLOAT LLEN SINTERSTORE ZRANGEBYSCORE
PERSIST GET HKEYS LPOP SISMEMBER ZRANK
PEXPIRE GETBIT HLEN LPUSH SMEMBERS ZREM
PEXPTREAT GETRANGE HMGET LPUSHX SMOVE ZREMRANGEBYRANK
PTTL GETSET HMSET LRANGE SPOP ZREMRANGEBYSCORE
RANDOMKEY INCR HSET LREM SRANDMEMBER ZREVRANGE
RENAME INCRBY HSETNX LSET SREM ZREVRANGEBYSCORE
RENAMENX INCRBYFLOAT HVALS LTRIM SUNION ZREVRANK
RESTORE MGET HSCAN RPOP SUNIONSTORE ZSCORE
SORT MSET   RPOPLPUSH SSCAN ZUNIONSTORE
TTL MSETNX   RPUSH   ZINTERSTORE
TYPE PSETEX   RPUSHX   ZSCAN
SCAN SET       ZRANGEBYLEX
OBJECT SETBIT       ZLEXCOUNT
  SETEX       ZREMRANGEBYLEX
  SETNX        
  SETRANGE        
  STRLEN      

以及

HyperLogLog Pub/Sub(发布/订阅) Transaction(事务) Connection(连接) Server(服务器)
PFADD PSUBSCRIBE DISCARD AUTH FLUSHALL
PFCOUNT PUBLISH EXEC ECHO FLUSHDB
PFMERGE PUBSUB MULTI PING DBSIZE
  PUNSUBSCRIBE UNWATCH QUIT TIME
  SUBSCRIBE WATCH SELECT INFO
  UNSUBSCRIBE     KEYS

暂时未开放的命令:

Keys(键) Scripting(脚本) Server(服务器)
MIGRATE EVAL BGREWRITEAOF
  EVALSHA BGSAVE
  SCRIPT EXISTS CLIENT KILL
  SCRIPT FLUSH CLIENT LIST
  SCRIPT KILL CLIENT GETNAME
  SCRIPT LOAD CLIENT SETNAME
    CONFIG GET
    CONFIG REWRITE
    CONFIG SET
    CONFIG RESETSTAT
    COMMAND
    COMMAND COUNT
    COMMAND GETKEYS
    COMMAND INFO
    DEBUG OBJECT
    DEBUG SEGFAULT
    LASTSAVE
    MONITOR
    ROLE
    SAVE
    SHUTDOWN
    SLAVEOF
    SLOWLOG
    SYNC

集群实例不支持的命令:

Transaction Connection Keys List
DISCARD SELECT MOVE BLPOP
EXEC   SCAN BRPOP
MULTI     BRPOPLPUSH
UNWATCH      
WATCH    

 

集群实例受限的命令:

Keys Strings Lists Sets Sorted Sets HyperLogLog
RENAME MSETNX RPOPLPUSH SINTERSTORE ZUNIONSTORE PFMERGE
RENAMENX     SINTER ZINTERSTORE  
      SUNIONSTORE    
      SUNION    
      SDIFFSTORE    
      SDIFF    
      SMOVE  

注:受限命令只支持所操作key均分布在单个hash slot中的场景,没有实现多个hash slot数据的合并功能,因此需要用hash tag的方式确保要操作的key均分布在一个hash slot中。比如有key1,aakey,abkey3,那么我们在存储的时候需要用{key}1, aa{key},ab{key}3的方式存储,这样调用受限命令时才能生效。具体关于hash tag的用法请参见redis官方文档:http://redis.io/topics/cluster-spec

集群实例特别说明

特别注意:集群实例与非集群实例目前暂时不支持互相升降配。即:1GB~64GB容量的AliCloudDB for Redis实例之间可以通过控制台来实现动态升降配,但暂时无法升配至128GB及以上的规格;反之亦然,128GB及以上容量的AliCloudDB for Redis实例之间可以通过控制台来实现动态升降配,但暂时无法降配至64GB及以下的规格。用户在初次购买时请特别注意这一点

云数据库REDIS版示例代码

PHP示例

下载及使用客户端phpredis 参考地址

  1. <?php {  
  2.   /* 这里替换为连接的实例host和port */ 
  3.     $host = "localhost";
  4.     $port = 6379;
  5.     /* 这里替换为实例id和实例password */
  6.     $user = "test_username";
  7.     $pwd = "test_password";
  8.     $redis = new Redis();
  9.     if ($redis->connect($host, $port) == false) {
  10.       die($redis->getLastError());
  11.     }
  12.     /* user:password 拼接成AUTH的密码 */
  13.     if ($redis->auth($user . ":" . $pwd) == false) {
  14.        die($redis->getLastError());
  15.     }
  16.     /* 认证后就可以进行数据库操作,详情文档参考https://github.com/phpredis/phpredis */
  17.     if ($redis->set("foo", "bar") == false) {
  18.        die($redis->getLastError());
  19.     }
  20.     $value = $redis->get("foo");
  21.     echo $value;
  22.    ?>

.net示例

1.下载及使用.net客户端:git clone https://github.com/ServiceStack/ServiceStack.Redis

2.新建.net项目

3.添加客户端引用,引用文件在库文件的ServiceStack.Redis/lib/tests中

测试代码示例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using ServiceStack.Redis;
  7. namespace ServiceStack.Redis.Tests
  8. {
  9.     class Program
  10.     {
  11.     public static void RedisClientTest()
  12.     {
  13.       string host = "127.0.0.1";/*访问host地址*/
  14.       string password = "fb92bf2e0abf11e5:123456128a1A";/*实例id:密码*/
  15.       RedisClient redisClient = new RedisClient(host, 6379, password);
  16.       string key = "test-aliyun";
  17.       string value = "test-aliyun-value";
  18.       redisClient.Set(key, value);
  19.       string listKey = "test-aliyun-list";
  20.       System.Console.WriteLine("set key " + key + " value " + value);
  21.       string getValue = System.Text.Encoding.Default.GetString(redisClient.Get(key));
  22.       System.Console.WriteLine("get key " + getValue);
  23.       System.Console.Read();
  24.     }
  25.     public static void RedisPoolClientTest()
  26.     {
  27.       string[] testReadWriteHosts = new[] {
  28.       "redis://:fb92bf2e0abf11e5:1234561178a1A@127.0.0.1:6379"/*redis://:实例id:密码@访问地址:端口*/
  29.       };
  30.       RedisConfig.VerifyMasterConnections = false;//需要设置
  31.       PooledRedisClientManager redisPoolManager = new PooledRedisClientManager(10/*连接池个数*/, 10/*连接池超时时间*/, testReadWriteHosts);
  32.       for (int i = 0; i < 100; i++)
  33.       {
  34.       IRedisClient redisClient = redisPoolManager.GetClient();//获取连接
  35.       RedisNativeClient redisNativeClient = (RedisNativeClient)redisClient;
  36.       redisNativeClient.Client = null;//AliCloudDB for Redis不支持client setname所以这里需要显示的把client对象置为null
  37.       try
  38.       {
  39.         string key = "test-aliyun1111";
  40.         string value = "test-aliyun-value1111";
  41.         redisClient.Set(key, value);
  42.         string listKey = "test-aliyun-list";
  43.         redisClient.AddItemToList(listKey, value);
  44.         System.Console.WriteLine("set key " + key + " value " + value);
  45.         string getValue = redisClient.GetValue(key);
  46.         System.Console.WriteLine("get key " + getValue);
  47.         redisClient.Dispose();//
  48.       }
  49.       catch (Exception e)
  50.       {
  51.         System.Console.WriteLine(e.Message);
  52.       }
  53.     }
  54.     System.Console.Read();
  55. }
  56. static void Main(string[] args)
  57. {
  58.      //单链接模式
  59.      RedisClientTest();  
  60.      //连接池模式  
  61.      RedisPoolClientTest(); 
  62. }

云数据库REDIS版常见问题

使用限制相关

AliCloudDB for Redis兼容哪些Redis命令和操作?

AliCloudDB for Redis兼容支持绝大部分开源Redis的命令和操作,仅禁用了个别命令。此外若您使用的是AliCloudDB for Redis集群实例,也会有部分Redis暂不支持。具体请参考“云数据库Redis版 >  操作命令”.

AliCloudDB for Redis是否支持修改配置参数?

AliCloudDB for Redis支持用户通过Web管理控制台修改部分配置参数,具体参数列表请登录Web管理控制台查看.

AliCloudDB for Redis的单个实例是否有处理能力、带宽和连接数等限制?

AliCloudDB for Redis实例在CPU处理能力、数据传输带宽(上行/下行)和连接数等方面都有限制,不同规格的实例的性能参数也是不同的。具体内容请参见“购买指导”---“规格说明”,或购买页面上的对应提示.

监控告警相关

如何对AliCloudDB for Redis进行监控?容量满了会自动告警吗?

AliCloudDB for Redis本身未提供容量告警,需用户自行到云监控中进行配置。云监控中提供了多项AliCloudDB for Redis监控项,用户可以根据需要自行配置。

配置方法请参见:https://docs.aliyun.com/?spm=5176.383732.201.107.pBM0Zt#/pub/cms/User_Manual/User_Manual&Service_Monitor

为什么我新创建的AliCloudDB for Redis实例的使用量就不为0?

AliCloudDB for Redis在产品行为上与Redis一致,当新建一个实例后它会自动生成一些字典类的系统文件,约占1~2MB的空间,因此在AliCloudDB for Redis的控制台上会看到该实例已经有少量的存储空间被占用。这是正常现象。

控制台功能相关

AliCloudDB for Redis修改默认的数据逐出策略?

AliCloudDB for Redis 的默认数据逐出策略是LRU,修改的话需要登陆REDIS控制台。进入实例列表--点击管理进入实例信息--系统参数,点击maxmemory-polocy 右侧的修改,即可修改逐出策略.

云数据库Redis修改密码的方法?

云数据库Redis的实例密码如果忘记了,用户可以登录Redis的控制台,在右侧可以点击右上角的修改密码对密码进行修改。 修改后在使用新密码进行登录,云数据库Redis的密码采用的是“实例id:密码"的格式。

AliCloudDB for Redis的缓存设置方法?

当客户购买的缓存空间满后,系统将根据客户设置的缓存策略清理过期数据,客户可以在AliCloudDB for Redis控制台实例列表--系统参数--maxmemory-policy设置自己的缓存策略,默认是VolatileLRU 按照LRU算法逐出原有数据,但仅逐出设置了过期时间的数据。

 

 

 

FAQ

关于此文档暂时还没有FAQ
返回
顶部