基本配置
# 指定接受的IP请求,不配置表示接受所有请求
# 内网可以不配置,外网建议配置接受IP,多个IP使用空格分隔
# bind 0.0.0.0 表示接受所有请求
bind 127.0.0.1
# redis3.2 之后加入的新特性,是否开启保护模式,默认开启(yes),关闭(no)
# 在没有设置bind、IP和密码的时候只允许访问127.0.0.1(即本地访问)
protected-mode yes
# redis监听的端口号
port 6379
# TCP监听的最大容纳数量,在高并发的环境下,需要把这个值调高以避免客户端连接缓慢的问题
# Linux 内核会把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值(默认128),要提升并发量需要修改这tcp_max_syn_backlog和somaxconn两个值才能达到目的
# 对于负载很大的服务程序一般会将它修改为2048或更大
tcp-backlog 511
# 客户端和Redis服务端的连接超时时间,默认为0,表示永不超时
timeout 0
# tcp会话保持时间
tcp-keepalive 300
# 是否在后台执行,yes:后台运行,守护线程;no:不是后台运行(默认)
daemonize yes
# redis的进程文件
pidfile /var/run/redis/redis.pid
# 操作系统相关参数可以设置通过upstart和systemd管理Redis守护进程,centos7以后都使用systemd
supervised systemd
# 指定了服务端日志的级别
# 级别说明:debug(开发、测试),verbose(比debug信息略少),notice(生产环境),warn(只有非常重要的信息)
loglevel notice
# 指定了记录日志的文件
# logfile "" :空字符串的话,日志会打印到标准输出设备;后台运行的redis标准输出是/dev/null
logfile /usr/redis/var/redis.log
# 数据库数量
databases 16
somaxconn和tcp_max_syn_backlog参数解释:
tcp基础:对于一个TCP连接,Server和Client需要通过三次握手来建立网络连接,当三次握手成功后,就可以看到端口的状态由Listen变成了Established,接着这条链路上就可以开始传递数据了 对于服务器而言,一个完整的连接建立过程,服务器会经历2中TCP状态:SYN_READ和ESTABLISHED,对应也会维护两个队列:
- 一个存放SYN的队列(半连接队列)
- 一个存放已经完成连接的队列(全连接队列)
当一个连接的状态是 SYN RECEIVED 时,它会被放在 SYN 队列中。当它的状态变为 ESTABLISHED 时,它会被转移到另一个队列。所以后端的应用程序只从已完成的连接的队列中获取请求。 如果一个服务器要处理大量网络连接,且并发性比较高,那么这两个队列长度就非常重要了。因为,即使服务器的硬件配置非常高,服务器端程序性能很好,但是这两个队列非常小,那么经常会出现客户端连接不上的现象,因为这两个队列一旦满了后,很容易丢包,或者连接被复位。所以,如果服务器并发访问量非常高,那么这两个队列的设置就非常重要了。
- tcp_max_syn_backlog:指定所能接受SYN同步包的最大客户端数量,即半连接上限,默认值是128,即SYN_REVD状态的连接数
- net.core.somaxconn:内核参数,指服务端所能accept即处理数据的最大客户端数量,即完成连接上限,默认128
参数设置:
- net.core.somaxconn:
- 临时改动:sysctl -w net.core.somaxconn=32768 ,立即生效,重启后恢复默认值
- 永久改动:在配置文件 /etc/sysctl.conf 最后添加一行 net.core.somaxconn=4000,再刷新配置文件 sysctl -p
快照配置
# 在启动redis时是否显示logo
always-show-logo yes
# 在900秒内有一个键内容发生更改触发快照机制
save 900 1
# 在300秒内有10个键内容发生更改触发快照机制
save 300 10
# 在60秒内有10000个键内容发生更改触发快照机制
save 60 10000
#快照出错时,是否禁止redis写入操作
stop-writes-on-bgsave-error no
# 持久化到 RDB 文件时,是否压缩,"yes" 为压缩,“no” 则反之
rdbcompression yes
# 是否开启RC64校验,默认是开启
rdbchecksum yes
# 快照文件名
dbfilename dump.rdb
# 快照文件保存路径
dir /usr/redis/var
复制选项
#配置master的密码,这样可以在连上master后进行认证
masterauth <master-password>
# 当从库同主库失去连接或者复制正在进行,从机库有两种运行方式:
1) 如果replica-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的读请求。
2) 如果replica-serve-stale-data设置为no,除去指定的命令之外的任何请求都会返回一个错误"SYNC with master in progress"
replica-serve-stale-data yes
# 是否设置从库只读
replica-read-only yes
# 是否使用socket方式复制数据, 目前redis复制提供两种方式,disk和socket。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件,有2种方式:
#1)disk是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave
#2)socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave
#3)disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。
#4)socket的方式就是一个个slave顺序复制, 只有在磁盘速度缓慢但是网络相对较快的情况下才使用socket方式,否则使用默认的disk方式
repl-diskless-sync no
# diskless复制的延迟时间,设置0为关闭。一旦复制开始还没有结束之前,master节点不会再接收新slave的复制请求,直到下一次开始。
repl-diskless-sync-delay 30
# slave根据master指定的时间进行周期性的PING监测
repl-ping-slave-period 10
# 复制链接超时时间,需要大于 repl ping slave period 否则会经常报超时
repl-timeout 60
# 在socket模式下是否在slave套接字发送SYNC之后禁用TCP_NODELAY
# 如果你选择"yes",Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了"no",数据传输到salve的延迟将会减少但要使用更多的带宽
repl-disable-tcp-nodelay no
# 复制缓冲区大小,只有在slave连接之后才分配内存
repl-backlog-size 1mb
# 多次时间master没有slave连接,就清空backlog缓冲区
repl-backlog-ttl 3600
# 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举
replica-priority 100
安全
# requirepass配置可以让用户使用AUTH命令来认证密码,才能使用其他命令。这让redis可以使用在不受信任的网络中
# 为了保持向后的兼容性,可以注释该命令,因为大部分用户也不需要认证
# 使用requirepass的时候需要注意,因为redis太快了,每秒可以认证15w次密码,简单的密码很容易被攻破,所以最好使用一个更复杂的密码
requirepass foobared
#把危险的命令给修改成其他名称。比如CONFIG命令可以重命名为一个很难被猜到的命令,这样用户不能使用,而内部工具还能接着使用
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#设置成一个空的值,可以禁止一个命令
rename-command CONFIG ""