redis配置下详解
```
# 如果想要使用到配置文件,Redis服务必须以配置文件的路径作为第一个参数启动。如:
./redis-server /path/to/redis.conf
# 单位说明:当需要指定内存大小时,可能会用到不同的单位,如1k、5GB、4M等,这里给出其单位含义:
# 指定单位是大小写不敏感。如1GB、1gB、1Gb是一样的
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
################################## 引用 ###################################
# 不同redis server可以使用同一个模版配置作为主配置,并引用其它配置文
# 件用于本server的个性化设置include并不会被CONFIG REWRITE命令覆盖。
# 但是主配置文件的选项会被覆盖。想故意覆盖主配置的话就把include放文件前面,
# 否则最好放末尾
#
# include .\path\to\local.conf
# include c:\path\to\other.conf
################################ 通用 #####################################
# 端口设置,默认为 6379
# 如果port设置为0 redis将不会监听tcp socket
port 6379
# TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
# 在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题
tcp-backlog 511
# 不指定bind的话redis将会监听所有网络接口
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
# 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 0
# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
# 推荐一个合理的值就是60秒
tcp-keepalive 0
# 指定服务器调试等级
# 可能值:
# debug (大量信息,对开发/测试有用)
# verbose (很多精简的有用信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你生产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice
# 指定日志文件名和保存位置
logfile ""
# 设置数据库个数
# 默认数据库是 DB 0,你可以在每个连接上使用 select <dbid> 命令选择一个不同的数据库,但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值
databases 16
################################ 快照 ################################
# Save the DB on disk:
# save <seconds> <changes>
#根据给定的时间间隔和写入次数将数据保存到磁盘
# 900秒(15分钟)之后,且至少1次变更
# 300秒(5分钟)之后,且至少10次变更
# 60秒之后,且至少10000次变更
save 900 1
save 300 10
save 60 10000
# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
# 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作
stop-writes-on-bgsave-error yes
# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象,默认都设为 yes
rdbcompression yes
# 是否校验rdb文件,版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠
rdbchecksum yes
# 持久化数据库的文件名
dbfilename dump.rdb
# 工作目录
# 例如上面的 dbfilename 只指定了文件名,但是它会写入到这个目录下。这个配置项一定是个目录,而不能是文件名
dir ./
################################# 复制 #################################
# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# 1) Redis replication is asynchronous, but you can configure a master to
# stop accepting writes if it appears to be not connected with at least
# a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
# master if the replication link is lost for a relatively small amount of
# time. You may want to configure the replication backlog size (see the next
# sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
# network partition slaves automatically try to reconnect to masters
# and resynchronize with them.
#
# slaveof <masterip> <masterport>
# 如果master设置了密码保护 (using the "requirepass" configuration
# directive below) slave服务连接master的密码
# masterauth <master-password>
# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种表现:
#
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes
# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve的数据在同master同步之后将很容易被删除)
slave-read-only yes
# 同步策略: 磁盘或socket,默认磁盘方式
repl-diskless-sync no
# 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。
# 默认值为5秒,设置为0秒则每次传输无延迟。
repl-diskless-sync-delay 5
# slave根据指定的时间间隔向master发送ping请求。默认10秒
# repl-ping-slave-period 10
# 同步的超时时间
# 1)slave在与master SYNC期间有大量数据传输,造成超时
# 2)在slave角度,master超时,包括数据、ping等
# repl-timeout 60
# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
# 如果选择yes,Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒。
# 如果选择no,数据传输到salve的延迟将会减少但要使用更多的带宽。
# 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,可以设置为“yes”。
repl-disable-tcp-nodelay no
# 设置数据备份的backlog大小。backlog是一个slave在一段时间内断开连接时记录salve数据的缓冲,
# 所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段
# 时间内把slave丢失的部分数据传送给它。
# 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长
# repl-backlog-size 1mb
# 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个
# slave断开开始计时多少秒后,backlog缓冲将会释放。
# 0表示永不释放backlog
# repl-backlog-ttl 3600
# 优先级数字小的salve会优先考虑提升为master
# 0作为一个特殊的优先级,标识这个slave不能作为master
slave-priority 100
################################## 安全 ###################################
# 要求客户端在处理任何命令时都要验证身份和密码
# requirepass foobared
# 命令重命名
# 在共享环境下,可以为危险命令改变名字。比如,你可以为 CONFIG 改个其他不太容易猜到的名字,这样内部的工具仍然可以使用
#
# Example:
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 也可以通过改名为空字符串来完全禁用一个命令
# rename-command CONFIG ""
################################### 限制 ####################################
# 设置最多同时连接的客户端数量
# maxclients 10000
# 要使用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见:maxmemmory-policy)删除key。
# maxmemory <bytes>
# 最大内存策略:如果达到内存限制了,Redis如何选择删除key。
# volatile-lru -> 根据LRU算法删除设置过期时间的key
# allkeys-lru -> 根据LRU算法删除任何key
# volatile-random -> 随机移除设置过过期时间的key
# allkeys-random -> 随机移除任何key
# volatile-ttl -> 移除即将过期的key(minor TTL)
# noeviction -> 不移除任何key,只返回一个写错误
#
# maxmemory-policy noeviction
# LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),所以你可以用样本量做检测
# 数字越大结果越精确但是会消耗更多CPU
# maxmemory-samples 3
############################## APPEND ONLY MODE ###############################
# AOF和RDB持久化能同时启动并且不会有问题。
# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性
appendonly no
# AOF文件名
appendfilename "appendonly.aof"
# Redis支持三种不同的模式:
# no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
# always:每次写操作都立刻写入到aof文件。慢,但是最安全。
# everysec:每秒写一次。折中方案
# appendfsync always
appendfsync everysec
# appendfsync no
# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF 日志)会产生很多磁盘I/O开销
# 把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式
no-appendfsync-on-rewrite no
# 自动重写AOF文件。如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。
# 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)
# 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 因异常被截断的AOF文件被redis启动时加载进内存
# 如果设置为no,erdis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件
aof-load-truncated yes
################################ LUA SCRIPTING ###############################
# Lua 脚本的最大执行时间,毫秒为单位
lua-time-limit 5000
################################ REDIS CLUSTER ###############################
# 只有开启了以下选项,redis才能成为集群服务的一部分
# cluster-enabled yes
# 配置redis自动生成的集群配置文件名
# cluster-config-file nodes-6379.conf
# 集群节点超时毫秒数。超时的节点将被视为不可用状态
# cluster-node-timeout 15000
# 为了达到最大限度的高可用性,可以设置为0,即slave不管和master失联多久都可以提升为master
# cluster-slave-validity-factor 10
# 只有在之前master有其它指定数量的工作状态下的slave节点时,slave节点才能提升为master
# cluster-migration-barrier 1
# 如果需要集群部分可用情况下仍可提供查询服务,设置为no。
# cluster-require-full-coverage yes
################################## 慢查询日志 ###################################
# 慢查询日志,记录超过多少微秒的查询命令。查询的执行时间不包括客户端的IO执行和网络通信时间,只是查询命令执行时间
# 1000000等于1秒,设置为0则记录所有命令
slowlog-log-slower-than 10000
# 记录大小,可通过SLOWLOG RESET命令重置
slowlog-max-len 128
############################# 事件通知 ##############################
#
# K Keyspace events, published with __keyspace@<db>__ prefix.
# E Keyevent events, published with __keyevent@<db>__ prefix.
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
# $ String commands
# l List commands
# s Set commands
# h Hash commands
# z Sorted set commands
# x Expired events (events generated every time a key expires)
# e Evicted events (events generated when a key is evicted for maxmemory)
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
#
# Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭
notify-keyspace-events ""
############################### 高级配置 ###############################
# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的
# 数据结构来编码。可以通过下面的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 与hash相似,list也可以用一种特别的编码方式来节省大量空间。
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度
set-max-intset-entries 512
# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
# 这种编码只适合长度和元素都小于下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# HyperLogLog稀疏结构表示字节的限制
hll-sparse-max-bytes 3000
# 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表
activerehashing yes
# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 客户端查询缓冲区累积新命令
hz 10
# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
aof-rewrite-incremental-fsync yes
```
有疑问加站长微信联系(非本文作者))