Redis¶
Redis 是一个基于内存、键值对的开源存储系统。它可以用作数据库、缓存和消息中间件。
在新浪云上,您可以很方便的创建和管理 Redis 实例。目前所有的 Redis 实例都是一主一从架构,我们会实时监控您的 Redis 实例,如果主节点宕机,我们会自动将从节点提升为主,从而保证您的服务和数据不受影响。
创建¶
进入云应用控制台的任一应用管理页面,点击左侧栏的『数据库与缓存/Redis』,进入 Redis 的管理页面,点击上方的『创建 Redis』,如下图所示:
创建实例需要设置以下参数:
- 名称:最大长度不超过 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的连接地址、端口、以及密码。
数据导入¶
如果你想将自己现有 Redis 实例里的数据导入到新浪云线上的 Redis 实例里,可以按以下步骤操作:
开启自己现有 Redis 实例的 AOF 功能(如果实例已经启用 AOF 功能则忽略此步骤)。
$ redis-cli -h Redis实例地址 -p Redis实例端口 config set appendonly yes
开启 AOF 功能后,Redis 实例会在数据目录下生成一个 .aof 文件,一般文件名为 appendonly.aof 。
通过 VPN 隧道 连接到新浪云的云端网络。执行以下命令将 .aof 文件中的数据导入到线上 Redis 实例里。
$ redis-cli -h 线上Redis实例地址 -p 线上Redis实例端口 -a 线上Redis实例密码 --pipe < appendonly.aof
注解
redis-cli 是 Redis 的命令行管理工具。
管理¶
点击实例右侧操作栏的『管理』可以进入一个连接到对应的 Redis 的 redis-cli 页面,你可以通过其管理你的 Redis。
你也可以通过 VPN 隧道 连接到新浪云的云端网络。然后使用 Redis Desktop Manager 等管理工具来管理 Redis 。
删除¶
进入 Redis 的管理页面,在对应实例后面的操作栏中选择『删除』即可。
扩容¶
你可以在线扩大或者缩小 Redis 实例的内存容量,进入 Redis 的管理页面,在对应实例后面的操作栏中选择『修改』即可,扩容期间 Redis 会重启,可能会造成短时间的服务不可用。
主从切换¶
每个 Redis 实例都是一主一从热备,如果主节点所在的机器宕机,监控会自动将从节点提升为主,并再添加一个新的从节点保持主从架构不变。整个过程对应用完全透明。
警告
当一个实例中的主节点失效,而最新的数据没有同步到对应的从节点时,主从切换会造成这部分数据丢失。
性能¶
下面是使用 redis-benchmark 对一个 1G 的 Redis 实例(在实例所在的机器)进行 benchmark 的结果。
$ 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
NodeJS¶
您可以使用 Redis 官网列出的任意 NodeJS客户端 来访问 Redis 。这里我们使用官网推荐的 node_redis 。
安装并添加 node_redis 到 package.json 文件。
npm install redis --save
连接代码示例:
var redis = require('redis');
var client = redis.createClient('redis://密码@地址:端口', {no_ready_check: true});
Go¶
您可以使用 Redis 官网列出的任意 Go客户端 来访问 Redis 。这里我们使用官网推荐的 Redigo 。
import "github.com/garyburd/redigo/redis"
c, err := redis.Dial("tcp", "地址:端口", redis.DialPassword("密码"))
if err != nil {
// handle error
}
defer c.Close()
Java¶
您可以使用 Redis 官网列出的任意 Java客户端 来访问 Redis 。这里我们使用官网推荐的 Jedis 。
在 pom.xml 文件中添加以下 Jedis 依赖。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
连接代码示例:
try {
URI redisUri = new URI("redis://密码@地址:端口");
JedisPool pool = new JedisPool(new JedisPoolConfig(),
redisUri.getHost(),
redisUri.getPort(),
Protocol.DEFAULT_TIMEOUT,
redisUri.getUserInfo().split(":",2)[1]);
} catch (URISyntaxException e) {
// URI couldn't be parsed.
}