redis(二) 配置文件
#####NETWORK 网络#####
# 绑定IP: 指定 redis 只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
bind 127.0.0.1
# 保护模式: 只允许绑定的IP验证密码后访问.
# 要是配置里没有指定bind或密码, 开启该参数后,redis只会本地进行访问,拒绝外部访问。
# 如果想任意客户端都能访问需要关闭保护模式
protected-mode yes
# 服务端口号
port 6379
# 客户端空闲超时等待时间,0 则为不主动断开连接.
timeout 0
#####GENERAL 常规#####
# 是否后台执行
deamonize yes
# 进程文件的保存位置
pidfile /var/run/redis/redis.pid
# 日志级别
# 级别包括:debug,verbose,notice,warn
loglevel notice
# 日志保存路径
logfile /usr/local/redis/var/redis.log
# 数据库的数量,默认使用0库
databases 16
#####SNAPSHOTTING 快照#####
# RDB核心规则配置 save <指定时间间隔> <执行指定次数更新操作> 满足条件就将内存中的数据同步到磁盘.
# 默认 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,
# 关闭RDB日志,配置 save "" ,并注释其他配置方案.
save 900 1
save 300 10
save 60 10000
# 当RDB持久化出现错误后,是否依然进行继续进行工作
stop-writes-on-bgsave-error yes
# 配置存储至本地数据库时是否使用LZF压缩方式压缩数据.
rdbcompression yes
# 是否校验rdb文件;在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes
#指定本地数据库文件名,一般采用默认的 dump.rdb
dbfilename dump.rdb
#数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /usr/local/redis/var
#####REPLICATION 同步#####
# 要复制对象
replicaof <masterip> <masterport>
# 要复制对象的密码
masterauth <master-password>
# 当从库同主机失去连接或者复制正在进行, 从库响应客户端的方式
# yes: 记录响应客户端请求.
# no: INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何请求都会返回一个错误”SYNC with master in progress”
replica-serve-stale-data yes
# 从库是否只读, 不允许写入.
replica-read-only yes
# 是否使用socket的方式复制数据.
# 发生在新建从库或者从库重连时的全量同步数据.
# 存在两种方式:
# 1. disk方式: master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave,多个从库同时同步.
# 2. socket方式(Diskless): master创建一个新的进程,直接把rdb文件以socket的方式发给slave,多个从库顺序同步.
repl-diskless-sync no
# diskless复制的延迟时间,等待尽可能多的从库的全量同步请求.
repl-diskless-sync-delay 5
# slave根据指定的时间间隔向服务器发送ping请求。
repl-ping-replica-period 10
# 复制连接超时时间。
# 从库: 认为主库离线, 停止服务.
# 主库: 认为从库离线, 剔除从库.
repl-timeout 60
# 是否禁止复制tcp链接的tcp nodelay参数.数据量传输很大的场景下,建议选择yes
repl-disable-tcp-nodelay no
# 复制缓冲区大小,保存最新的指令.
# 在从库离线重连后,如果缓冲区没有被刷新,则无需执行全量复制,只需部分同步即可.
# 复制缓冲区只有存在从库的时候才生成.
repl-backlog-size 1mb
# 复制缓冲区的释放等待时间.当最后一个从库下线了之后.
repl-backlog-ttl 3600
# 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master.
# 设置为0 的时候,从库永不被选择.
replica-priority 100
# master写入的最低从库健康数.设置为0则表示关闭限制.
min-replicas-to-write 3
# 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave
min-replicas-max-lag 10
# 在端口转发或NAT网络环境中,指定从库的ip与端口
replica-announce-ip 5.5.5.5
replica-announce-port 1234
#####SECURITY 安全#####
# 密码 由于redis的性能优秀,每秒可尝试认证15万次,所以密码复杂度的提升有助于服务的安全.
requirepass foobared
# 替换命令,将一些危险的命令对用于隐藏或者禁用.
# rename-command CONFIG "" 禁用命令.
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#####CLIENTS 客户端#####
最大连接数,包含客户端连接,从库同步与内部文件打开.
maxclients 10000
#####MEMORY MANAGEMENT 内存配置#####
# 最大内存容量. 超过需要使用清除策略.
maxmemory <bytes>
# 清除策略.
#volatile-lru:利用LRU算法移除设置过过期时间的key。
#volatile-random:随机移除设置过过期时间的key。
#volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:随机移除任何key。
#noeviction:不移除任何key,只是返回一个写错误。
maxmemory-policy noeviction
# 使用lru或者ttl淘汰算法的检测样本数.
maxmemory-samples 5
# 是否开启salve的最大内存
replica-ignore-maxmemory yes
#####LAZY FREEING#####
# 以非阻塞方式释放内存
# 使用以下配置指令调用了
# 释放策略:定时检测并删除已经标记失效的key;在查询时查询到已经标记失效的key.
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
#####APPEND ONLY MODE aof日志#####
它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
# 开启aof日志
appendonly no
# 指定本地数据库文件名,默认值为 appendonly.aof
appendfilename "appendonly.aof"
#aof持久化策略的配置
#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
#always表示每次写入都执行fsync,以保证数据同步到磁盘
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
# appendfsync always
appendfsync everysec
# appendfsync no
# 在重写的时候是否阻塞fsync,将导致服务不可用.
# 设置为yes时: 在aof重写的时候,主进程写入(fsync)的记录暂存在内存中,等重写完成再落入aof日志.
# linux的fsync策略是30S,所以最高可能丢失30S的数据.
no-appendfsync-on-rewrite no
# 自动重写配置 日志大小的百分比
# 当目前aof文件大小超过上一次重写的aof文件大小的百分之多少时Redis能够调用bgrewriteaof对日志文件进行重写.
auto-aof-rewrite-percentage 100
#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所
#在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以
aof-load-truncated yes
#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes
#####REDIS CLUSTER 集群配置#####
# 集群开关,默认是不开启集群模式
# cluster-enabled yes
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf
#节点互连超时的阀值。集群节点超时毫秒数
# cluster-node-timeout 15000
#在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:
#比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
# cluster-replica-validity-factor 10
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移
# cluster-migration-barrier 1
#默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致
# cluster-require-full-coverage yes