centos7安装redis6及持久化的选择
一. 安装redis6.0.4,并配置
1. 下载 redis6.0.4 版本并解压
[root@test ~]# wget http://download.redis.io/releases/redis-6.0.4.tar.gz
[root@test ~]# tar -zxvf redis-6.0.4.tar.gz
[root@test ~]# cd redis-6.0.4
2. 安装gcc,并保证gcc版本>5.3
[root@test redis-6.0.4]# yum –y install gcc yum安装gcc默认版本为4.8.5< 5.3
[root@test redis-6.0.4]# gcc –v 查看gcc版本
3. 升级gcc到9+
[root@test redis-6.0.4]# yum -y install centos-release-scl
[root@test redis-6.0.4]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@test redis-6.0.4]# scl enable devtoolset-9 bash // 临时有效,退出 shell 或重启会恢复原 gcc 版本
[root@test redis-6.0.4]# echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile //长期有效
4. 查看gcc版本
[root@test redis-6.0.4]# gcc –v
5. 编译安装redis并指定安装目录
[root@test redis-6.0.4]# make && make install PREFIX=/usr/local/redis6
[root@test redis-6.0.4]# cp redis.conf /usr/local/redis6 拷贝一份配置文件
6. 修改redis配置文件
[root@test redis-6.0.4]# vim /usr/local/redis6/redis.conf
bind 0.0.0.0 访问控制
port 6379 指定端口
daemonize yes 将no改为yes允许redis后台启动
pidfile “/usr/local/redis6/redis_6379.pid” 指定pid存放目录
logfile "/usr/local/redis6/redis.log" 指定日志存放目录
dir "/usr/local/redis6/data" 指定数据存放目录
requirepass 123456 为redis设置密码
maxmemory 4294967296 redis设置最大存储空间为4GB单位为字节(byte),根据服务器设置
maxmemory-policy allkeys-lru 设置redis回收机制,默认不删除,当内存不足需写入新数据时,移除使用最少的key
7. 启动并连接redis
[root@test redis-6.0.4]# mkdir /usr/local/redis6/data
[root@test redis-6.0.4]# cd /usr/local/redis6/bin
[root@test bin]# ./redis-server ../redis.conf
[root@test bin]# ./redis-cli -a 123456
二. 解决redis启动的三个警告
第一个警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
第二个警告:overcommit_memory is set
to 0! Background save may fail under low memory condition. To fix this issue
add ‘vm.overcommit_memory = 1’ to/etc/sysctl.conf and then reboot or run the
command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
第三个警告:you have Transparent Huge
Pages (THP) support enabled in your kernel. This will create latency and memory
usage issues with Redis. To fix thisissue run the command ‘echo never >
/sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your
/etc/rc.local in order to retain thesetting after a reboot. Redis must be
restarted after THP is disabled.
解决方案
考虑到redis一般都是部署在服务器上作为服务存在的。所以,本文的解决方案都是持久性配置,不是临时配置。
第一个警告
将net.core.somaxconn = 1024添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。
第二个警告
将vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。
第三个警告
将echo never >
/sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后执行source /etc/rc.local生效配置。
三. 关于redis持久化的选择
RDB优点:
高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作
比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
RDB的缺点:
意外宕机时,最后一次持久化的数据会丢失
AOF优点:
可以灵活的设置同步持久化appendfsync always或异步持久化appendfsync verysec
宕机时,仅可能丢失1秒的数据
AOF的缺点:
AOF文件的体积通常会大于RDB文件的体积
执行fsync策略时的速度可能会比RDB慢