服务安装
- 首先下载最新版本Redis安装包,我这里使用的是redis5.0.2,官网下载地址:https://redis.io/download;
- 将下载好的安装包
redis-5.0.2.tar
放入到Linux目录/usr/local下; - 解压安装包:
tar -xvf redis-5.0.2.tar
; - cd到解压好的redis-5.0.2目录下,执行
make
命令; - 注意:执行命令的时候可能报错(如果未报错可忽略该步骤):
gcc:command not found
,这个错误说明当前Linux环境中gcc没有安装,执行yum -y install gcc
命令进行安装; - 可能还会报错(如果未报错可忽略该步骤):
error: jemalloc/jemalloc.h: No such file or directory
,这个原因是jemalloc重载了Linux下的ANSIC的malloc和free函数。解决办法:make时添加参数,make MALLOC=libc
; - 接着进入
src
目录下,执行make install
,安装成功后执行make test
测试一下,此时可能还会报错(如果未报错可忽略以下步骤):You need tcl 8.5 or newer in order to run the Redis test
,这个是执行make test需要8.5版本的tcl,执行wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
。如果wget命令不存在,需要先安装wget命令:yum -y install wget
; - 接着第7步(如果第7步没问题该步骤可忽略),如果tcl下载完成,解压并进入到/tcl/unix目录下,执行
sudo ./configure
命令,完成后再执行sudo make
命令,最后执行sudo make install
。tcl安装成功之后回到redis目录再次执行make test
,最终提示All tests passed without errors!
表示make test成功; - 执行
make install
,正常会显示5个INSTALL,表示redis安装成功;
服务启动配置
- 安装完毕之后,首先在
/redis-5.0.2
目录下启动测试一下,输入./redis-server redis.conf
,测试OK接着后续配置; - 创建两个目录,分别为
/var/redis/6379
和/etc/redis
,前者用来存在持久化数据文件,后者用来存放配置文件,稍后会在配置文件中配置; - 复制redis根目录下的配置文件redis.conf到
/etc/redis
目录下,cp redis.conf /etc/redis/6379.conf
; - 设置开机启动,拷贝
/redis-5.0.2/utils
目录下的redis_init_script
文件到/etc/init.d
目录下,并重命名为redisd,输入chkconfig redisd on
打开开机启动配置; - 设置daemonize启动模式,修改
/etc/redis/6379.conf
配置文件,找到daemonize所在行并将状态改为yes,如:daemonize yes
,然后找到dir所在行,配置一下redis工作目录(存在持久化文件),如:dir /var/redis/6379
- 输入
service redisd start
启动redis,启动成功后使用redis-cli连接测试; - 检查内存使用率,可使用
redis-cli -r 10 -i 1 info|grep used_memory_human
命令,表示:每隔1秒输出内存的使用量,总共输出10次;
RDB&AOF持久化
- RDB是Redis默认的持久化方案(Redis默认开启),每隔一段时间内超过设定的修改操作次数,就会自动生成一份内存数据的完整快照。优点:对系统性能消耗小,只需要一个子进程保存数据,适合大规模数据恢复。缺点:数据完整性和一致性不高,备份时比较占用内存(双倍内存数据大小),如果内存占用特别大可能导致服务短时间不可用。可在6379.conf配置文件中查看以下配置:
# save ""
save 900 1
save 300 10
save 60 10000
- AOF默认不开启,它的出现时为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每隔写操作,并追加到文件中。如果开启AOF,那么在数据恢复的时候会选择从AOF中进行恢复,查看以下配置:
appendonly yes
# If unsure, use "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
第一步将appendonly属性改为yes,并且设置每隔一秒钟追加一次(默认设置)。AOF的优点:数据完整性和一致性更高,在rewrite的时候对性能影响比较小,由子进程执行操作。缺点:AOF的持久化文件比RDB文件大,而且会随着数据量越来越大,使数据恢复也会越来越慢,AOF的写QPS要比RDB低;
- 根据Redis使用的业务场景来确定数据持久化方案,如果对数据的完整性和一致性要求不是很高可以只开启RDB,这样性能最好。如果对数据完整性和一致性有一定的要求,一般同时开启RDB(不能关闭,主从复制时需要用到)和AOF,这样在数据恢复的时候,系统会默认选择AOF进行数据恢复;