Redis ############ `Redis `_ 是一个基于内存、键值对的开源存储系统。它可以用作数据库、缓存和消息中间件。 在新浪云上,您可以很方便的创建和管理 Redis 实例。目前所有的 Redis 实例都是一主一从架构,我们会实时监控您的 Redis 实例,如果主节点宕机,我们会自动将从节点提升为主,从而保证您的服务和数据不受影响。 创建 ======= 进入云应用控制台的任一应用管理页面,点击左侧栏的『数据库与缓存/Redis』,进入 Redis 的管理页面,点击上方的『创建 Redis』,如下图所示: .. image:: /images/redis-create.png 创建实例需要设置以下参数: - 名称:最大长度不超过 32 个字符,限英文、数字、下划线,横线。 - 内存:Redis 最大使用的内存的大小。 - 内存满时删除策略:也就是 Redis 配置文件里的 *maxmemory-policy* ,内存满时对 Key 的删除策略,默认为“不删除,返回错误(noeviction)”。其它可选项见下表所示: =============== =============================================================== 策略 说明 =============== =============================================================== noeviction 不删除,直接返回错误。 allkeys-lru 优先删除最近最少使用的 key,以释放内存。 volatile-lru 优先删除设定了过期时间的 key 中最近最少使用的 key,以释放内存。 allkeys-rando 随机删除一个 key,以释放内存。 volatile-random 从设定了过期时间的 key 中随机删除一个,以释放内存。 volatile-ttl 从设定了过期时间的 key 中删除最老的 key,以释放内存。 =============== =============================================================== 更详细的内容参见: `Using Redis as an LRU cache `_ 。 创建后,即可点击管理进入信息页,在信息页中,可以查看Redis的连接地址、端口、以及密码。 .. image:: /images/redis-info.png 数据导入 ========= 如果你想将自己现有 Redis 实例里的数据导入到新浪云线上的 Redis 实例里,可以按以下步骤操作: 开启自己现有 Redis 实例的 AOF 功能(如果实例已经启用 AOF 功能则忽略此步骤)。 .. code-block:: console $ redis-cli -h Redis实例地址 -p Redis实例端口 config set appendonly yes 开启 AOF 功能后,Redis 实例会在数据目录下生成一个 *.aof* 文件,一般文件名为 *appendonly.aof* 。 通过 :doc:`/sae/services/cloudbridge` 连接到新浪云的云端网络。执行以下命令将 *.aof* 文件中的数据导入到线上 Redis 实例里。 .. code-block:: console $ redis-cli -h 线上Redis实例地址 -p 线上Redis实例端口 -a 线上Redis实例密码 --pipe < appendonly.aof .. note:: `redis-cli `_ 是 Redis 的命令行管理工具。 管理 ======== 点击实例右侧操作栏的『管理』可以进入一个连接到对应的 Redis 的 redis-cli 页面,你可以通过其管理你的 Redis。 .. image:: /images/redis-cli.png 你也可以通过 :doc:`/sae/services/cloudbridge` 连接到新浪云的云端网络。然后使用 `Redis Desktop Manager `_ 等管理工具来管理 Redis 。 删除 ======== 进入 Redis 的管理页面,在对应实例后面的操作栏中选择『删除』即可。 扩容 ======= 你可以在线扩大或者缩小 Redis 实例的内存容量,进入 Redis 的管理页面,在对应实例后面的操作栏中选择『修改』即可,扩容期间 Redis 会重启,可能会造成短时间的服务不可用。 主从切换 ========= 每个 Redis 实例都是一主一从热备,如果主节点所在的机器宕机,监控会自动将从节点提升为主,并再添加一个新的从节点保持主从架构不变。整个过程对应用完全透明。 .. warning:: 当一个实例中的主节点失效,而最新的数据没有同步到对应的从节点时,主从切换会造成这部分数据丢失。 性能 ======= 下面是使用 `redis-benchmark `_ 对一个 1G 的 Redis 实例(在实例所在的机器)进行 benchmark 的结果。 .. code-block:: console $ redis-benchmark -h lj******mfzg.redis.sae.sina.com.cn -p 10017 -a ****** -q -n 100000 PING_INLINE: 82712.98 requests per second PING_BULK: 78247.26 requests per second SET: 78988.94 requests per second GET: 78740.16 requests per second INCR: 79428.12 requests per second LPUSH: 78064.01 requests per second LPOP: 79051.38 requests per second SADD: 78864.35 requests per second SPOP: 78247.26 requests per second LPUSH (needed to benchmark LRANGE): 79051.38 requests per second LRANGE_100 (first 100 elements): 37257.82 requests per second LRANGE_300 (first 300 elements): 15569.05 requests per second LRANGE_500 (first 450 elements): 10976.95 requests per second LRANGE_600 (first 600 elements): 8773.47 requests per second MSET (10 keys): 46641.79 requests per second