下载和编译
redis官网:http://redis.io/
redis中文:http://www.redis.cn/
redis快速上手:http://redis.io/topics/quickstart
下载,解压,编译
1 | [root@linux1 Downloads]# wget http://download.redis.io/releases/redis-3.0.7.tar.gz |
编译完成之后会在./src
目录中生成4个文件
redis-server
Redis服务器的daemon启动程序redis-cli
Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作redis-benchmark
Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能redis-stat
Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
初次运行
二进制文件是编译完成后在src目录下。默认端口是6379
,运行如下:
1 | [root@linux1 redis-3.0.7]# src/redis-server |
redis默认运行不是静默的方式,使用ctrl + c
停止redis服务
指定配置文件启动redis
1 | [root@linux1 src]# ./redis-server ../redis.conf |
自带的客户端连接redis
服务
1 | [root@linux1 src]# ./redis-cli |
停止redis
服务
1 | $ ./redis-cli shutdown |
install方式安装
编译安装
1 | [root@linux2 redis-3.0.7]# mkdir /usr/local/redis |
性能测试
使用redis-benchmark测试
1 | [root@linux2 bin]# ./redis-benchmark -t GET,SET |
redis服务集群配置
使用单机的方式演示集群,多机器类似
创建两个文件夹
用于分别部署master
和slave
1 | [root@linux1 redis-3.0.7]# mkdir -p /usr/local/redis/bin |
复制编译好的文件
将刚才编译好的二进制文件和配置文件,分别复制到刚才创建好的文件夹中
1 | [root@linux1 redis-3.0.7]# cd src/ |
配置master
1 | [root@linux1 ~]# cd /usr/local/redis/bin |
配置slave
1 | [root@linux1 ~]# cd /usr/local/redis1/bin |
启动集群
分别启动master
和slave
服务
1 | [root@linux1 bin]# ./redis-server redis.conf |
查看master
服务的信息
1 | [root@linux1 bin]# ./redis-cli |
查看slave
服务的信息
1 | [root@linux1 bin]# ./redis-cli -p 6380 |
测试
master
和slave
现在都没有数据
1 | 127.0.0.1:6379> keys * |
往master
服务中写入数据
1 | 127.0.0.1:6379> set name Jerry.Chen |
slave
服务中查看数据
1 | 127.0.0.1:6380> keys * |
redis.conf 配置文件
1 | [root@linux1 ~]# cd /usr/local/redis/bin |
daemonize
是否后台运行,默认是no
,修改为yes
,即可以在后台运行了
requirepass
设置redis
服务的密码,默认未开启,查找# requirepass foobared
,然后修改进行开启密码。如果开启了密码,命令行操作方式
1 | [root@linux1 bin]# ./redis-server -a foobared |
pidfile
redis
服务的pid
文件位置
timeout
请求超时时间
loglevel
log信息级别
logfile
log文件位置
databases
开启数据库的数量,默认是16个
save
保存快照的频率,第一个表示多长时间,第三个表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
appendonly
默认是no
,可以写yes
。这个选项就是负责是否开启AOF
日志的开关。AOF
日志,你可以简单理解为MySQL binlog
一样的东西,作用就是记录每次的写操作,在遇到断电等问题时可以用它来恢复数据库状态。但是他不是二进制的,而是文本的,一行一行,写得很规范。如果你是一台redis,那你也能人肉通过它恢复数据
1 | ############################## 仅追加方式 ############################### |
运行流程
既然是log文件,而且是要用于恢复的,那么我们动动脚趾都能想到,这玩意肯定会越来越大,不管你的应用是大是小,如果AOF文件只增不减的话,那文件将会无限长大,这个问题是所有binlog都会遇到的。而通常遇到这种问题都会有一个rotate方案。就是当日志达到一定大小或者每隔一段时间将日志写到新的一个文件中,旧日志文件可以用来备份或其它。
而Redis的AOF还和rotate略有不同,他用了一种比较简单的方法,就是先给当前的所有数据做一个快照。然后再在这个快照的基础上写接下来的日志。
照快照的好处是,你之前可能用了10w次操作共改变了100条数据(比如在一条数据上进行了多次操作)。那这时你AOF中的10w条写操作记录就变成了100条记录。相当于将前面的执行全部合并了。原本很大AOF变小了。
执行这个操作的命令是:BGREWRITEAOF
(background rewrite append only file)
这个快照长什么样呢?基本和一般的写日志没什么两样,也是一条一条的写记录。。比如现在Redis中总共存了3条string类型的数据a=>1,b=>2,c=>3。那这个快照的基本内容就是写入a=>1
,写入b=>2
,写入c=>3
。
这时候要用AOF进行恢复的时候,只要先执行了前面几条,就能够恢复当前状态,然后再执行之后来的写操作,就能完全重现数据了。