Redis配置文件被分成几大块区域,分别是:
1.通用(general)
2.快照(snapshotting)
3.复制(replication)
4.安全(security)
5.限制(limits)
6.追加模式(append only mode)
7.LUA脚本(lua scripting)
8.Redis集群(redis cluster)
9.慢日志(slow log)
10.延迟监控(latency monitor)
11.事件通知(event notification)
12.高级配置(advanced config)
注: INCLUDES配置:当机器不只存在1个Redis实例时,可以实现每个Redis实例的"个性化"配置,此时,可以将这些实例的共有配置写到redis.conf中,而个性化的配置写到由include配置路径指定的文件中。
1. 通用(general):
1
2
3
4
5
6
7
8
9
10
11
|
############################ GENERAL #################################
daemonize no
##是否以后台daemon方式运行(默认为no)
pidfile
/var/run/redis/redis
.pid
##Pid文件位置
port 6379
##监听端口
tcp-backlog 511
##客户端连接队列值, 在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志
bind 127.0.0.1
##指定redis所响应的连接请求(默认响应本机所有网卡的连接请求)
timeout 0
##请求超时时间(0表示永不关闭)
tcp-keepalive 0
##TCP存活检测(单位为秒,0表示不进行检测)
loglevel notice
##log信息级别(分四级,即debug、verbose、notice、warning)
logfile
/var/log/redis/redis
.log
##log文件位置,如设置为[logfile ""]空字符串,则redis会将日志输出到标准输出,被写到/dev/null中
databases 16
##开启数据库数量(默认数据库是编号为0的数据库,可使用select <DBid>来选择相应数据库)
|
2. 快照(snapshotting)----主要涉及的是redis的RDB持久化相关的配置
save * *: 保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照,可设置多个条件。如想禁用RDB持久化策略,不设置任何save指令即以,或设置[save ""]
1
2
3
4
5
6
7
8
9
|
########################## SNAPSHOTTING #############################
save 900 1
##每15分钟且至少有1个key改变,就触发一次持久化
save 300 10
##每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000
##每60秒至少有10000个key改变,就触发一次持久化
stop-writes-on-bgsave-error
yes
##redis持久化数据到磁盘时如出现失败,默认redis会停止接受所有的写请求
rdbcompression
yes
##是否使用压缩
rdbchecksum
yes
##是否使用CRC64算法来进行数据校验
dbfilename dump.rdb
##设置数据快照文件名(只是文件名,不包括目录)
dir
/var/lib/redis/
##设置数据快照的保存目录(这个是目录)
|
3. 复制(replication)
############################### REPLICATION ##########################
通过slaveof配置项可控制某一个redis作为另一个redis的从服务器,通过指定IP和端口来定位到主redis的位置
1
|
# slaveof <masterip> <masterport>
|
如主redis设置验证密码(使用requirepass设置),则需在从redis的配置中使用masterauth来设置校验密码,否则主redis会拒绝从redis的访问请求
1
|
# masterauth <master-password>
|
从redis失去与主redis的连接,或者主从同步正在进行时,redis对外部发来的访问请求的两种处理选择:
选择1:设置为yes(默认),从redis仍会继续响应客户端的读写请求
选择2:设置为no,从redis会对客户端的请求返回“SYNC with master in progress”(例外:当客户端发来INFO请求和SLAVEOF请求,从redis还是会进行处理)
1
2
|
slave-serve-stale-data
yes
slave-
read
-only
yes
##设置从redis只读
|
复制同步策略:磁盘或者socket
新的从redis上线或主redis重新上线时应做数据全同步。需要将一个新的RDB文件dump出来,然后从主redis传到从redis。有两种情况:
1. 基于硬盘(disk-backed):主redis创建一个新进程dump RDB,之后由父进程(即主进程)增量传给从redis
2. 基于socket(diskless):主redis创建一个新进程直接dump RDB到从redis的socket,不经过主进程,不经过硬盘
如基于硬盘,RDB文件创建后,一旦创建完毕,可以同时服务更多从redis;如基于socket,新的从redis加入后,需进行排队(如超出repl-diskless-sync-delay设定时时);当用diskless时,主redis等待repl-diskless-sync-delay设定的秒数后,如无新的从redis加入,就直接传,后来的需排队等待。(默认用disk-based)
1
2
3
|
repl-diskless-
sync
no
repl-diskless-
sync
-delay 5
##每五秒传输一次(需开启diskless)
# repl-ping-slave-period 10 ##设置从redis向主redis发出PING包的周期(默认10秒)
|
在主从同步时,可能在这些情况下会有超时发生:
1. 以从redis的角度来看,当有大规模IO传输时。
2. 以从redis的角度来看,当数据传输或PING时,主redis超时
3. 以主redis的角度来看,在回复从redis的PING时,从redis超时
用户可以设置上述超时的时限,不过要确保这个时限比repl-ping-slave-period的值要大,否则每次主redis都会认为从redis超时。
1
|
# repl-timeout 60
|
设置主从同步时是否禁用TCP_NODELAY。如开启TCP_NODELAY,主redis会使用更少的TCP包和更少的带宽来向从redis传输数据,但可能会增加同步延迟(40ms)。如关闭TCP_NODELAY,那数据同步的延迟时间会降低,但会消耗更多的带宽
1
|
repl-disable-tcp-nodelay no
|
设置同步队列长度。队列长度(backlog)是主redis中的一个缓冲区,在与从redis断开连接期间,主redis会用这个缓冲区来缓存应该发给从redis的数据。这样,当从redis重新连接上后,就不必重新全量同步数据,只需要同步这部分增量数据即可
1
|
# repl-backlog-size 1mb
|
设置主redis清理缓冲队列等待的时间长度(设置为0表示永不清理,默认为1个小时)
1
2
|
# repl-backlog-ttl 3600
slave-priority 100
##设置从redis优先级,编号越小,优先级越高(默认100)
|
如主redis发现有超过M个从redis的连接延时大于N秒,那么主redis就停止接受外来的写请求
1
2
|
# min-slaves-to-write 3
# min-slaves-max-lag 10
|
假如有大于等于3个从redis的连接延迟大于10秒,那么主redis就不再接受外部的写请求。上述两个配置中有一个被置为0,则这个特性将被关闭
4. 安全(security)
1
2
3
4
5
|
############################# SECURITY #################################
##设置redis客户端在向redis-server发送请求之前,先进行密码验证。
# requirepass foobared ##设置密码为"foobared"
# rename-command CONFIG b840fc02d524045429941...... ##对redis指令进行更名
# rename-command CONFIG "" ##禁用CONFIG命令
|
5. 限制(limits)
1
2
3
|
############################### LIMITS ################################
# maxclients 10000 ##设置redis可以同时与多少个客户端进行连接(默认为10000个客户端)
# maxmemory <bytes>
|
设置redis可使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。如redis无法根据移除规则来移除内存中的数据,或者我们设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息
如果你的redis是主redis,那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在设置的是“不移除”的情况下,才不用考虑这个因素。
对于内存移除规则来说,redis提供了多达6种的移除规则。他们是:
1. volatile-lru:使用LRU算法移除过期集合中的key
2. allkeys-lru:使用LRU算法移除key
3. volatile-random:在过期集合中移除随机的key
4. allkeys-random:移除随机的key
5. volatile-ttl:移除那些TTL值最小的key,即那些最近才过期的key。
6. noeviction:不进行移除。针对写操作,只是返回错误信息。(默认规则)
无论使用上述哪一种移除规则,如果没有合适的key可以移除的话,redis都会针对写请求返回错误信息。
1
2
|
# maxmemory-policy noeviction ##不进行移除
# maxmemory-samples 5 ##设置LRU算法的样本数
|
6. 追加模式(append only mode)
1
2
3
|
########################## APPEND ONLY MODE ###########################
appendonly on
##打开AOF功能
appendfilename
"appendonly.aof"
##设置AOF文件的名称
|
AOF持久化策略,fsync()调用,用来告诉操作系统立即将缓存的指令写入磁盘,redis支持三种不同的模式:
1. always:每次写请求都强制调用fsync,该模式下,redis会相对较慢,但数据最安全
2. everysec:每秒调用一次fsync
3. on:不调用fsync等待系统自己同步[fsync是指把缓存中的写指令记录到磁盘中]
1
|
appendfsync everysec
##每秒调用一次fsync
|
当BGSAVE或BGWRITEAOF运行时,fsync()在主进程中的调用会被阻止。这意味着当另一路进程正在对AOF文件进行重构时,redis的持久化功能就失效了,就像设置了“appendsync none”一样。 如果redis有时延问题, 那么将选项设置为yes。 否则请保持no,因为这是保证数据完整性的最安全的选择。
1
|
no-appendfsync-on-rewrite no
|
允许redis自动重写aof。当aof增长到一定规模时,redis会隐式调用BGREWRITEAOF来重写log文件,以缩减文件体积。redis是这样工作的:redis会记录上次重写时的aof大小。如redis自启动至今还没有进行过重写,那么启动时aof文件的大小会被作为基准值。该基准值会和当前的aof大小进行比较。如当前aof大小超出所设置的增长比例,则会触发重写。另外还需要设置一个最小大小,是为了防止在aof很小时就触发重写。如设置auto-aof-rewrite-percentage为0,则会关闭此重写功能。
1
2
3
|
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated
yes
##当aof文件被损坏时,redis将返回错误并退出
|
7. LUA脚本(lua scripting)
1
2
|
############################ LUA SCRIPTING #########################
lua-
time
-limit 5000
##设置lua脚本最大运行时间(默认毫秒,设置为0或负数,既不会报错也无时间限制)
|
8. Redis集群(redis cluster)
1
2
3
4
5
6
7
8
|
############################ REDIS CLUSTER ##########################
# cluster-enabled yes ##开启redis集群
# cluster-config-file nodes-6379.conf ##集群配置文件(启动自动生成)
# cluster-node-timeout 15000 ##节点互联超时的阀值
# cluster-slave-validity-factor 10 ##slave节点检测因素,开始failover的超时时限是通过factor与timeout的乘积来确定的
# cluster-migration-barrier 1 ##设置master只有在关联多少slave时才会触发迁移过程
# cluster-require-full-coverage yes
##集群各节点在检测到至少一个hash槽位遗漏的情况下将停止处理查询请求。如集群部分节点宕机(例如部分hash槽位没有被分配)会造成整个集群不可用,直到所有槽位均被分配时才会自动恢复为可用状态
|
9. 慢日志(slow log)
1
2
3
4
|
############################### SLOW LOG #############################
##redis慢日志是指一个系统进行日志查询超过了指定时长。这个时长不包括IO操作,如与客户端的交互、发送响应内容等,而仅包括实际执行查询命令的时间。针对慢日志,可设置两个参数,一个是执行时长,单位是微秒;另一个是慢日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。
slowlog-log-slower-than 10000
##设置执行时长为10000微秒(单位为微秒,负数表示禁用慢日志功能,而0则表示强制记录每一个命令)
slowlog-max-len 128
##设置慢日志最大长度
|
10. 延迟监控(latency monitor)
1
2
|
############################# LATENCY MONITOR ####################
latency-monitor-threshold 0
##用LATENCY打印redis实例在跑命令时的耗时图表,只记录大于等于所设置值的操作(0表示关闭监控)
|
11. 事件通知(event notification)----向客户端通知某些事件的发生
1
2
|
########################## EVENT NOTIFICATION #######################
notify-keyspace-events
""
##通知pub/sub客户端关于key空间的变化(默认关闭)
|
12. 高级配置(advanced config)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
############################# ADVANCED CONFIG ########################
##有关哈希数据结构的配置项
hash
-max-ziplist-entries 512
hash
-max-ziplist-value 64
##有关列表数据结构的配置项
list-max-ziplist-entries 512
list-max-ziplist-value 64
##有关集合数据结构的配置项
set
-max-intset-entries 512
##有关有序集合数据结构的配置项
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
##有关HyperLogLog字节限制的配置项
hll-sparse-max-bytes 3000
##关于是否需要再哈希的配置项
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的配置项
aof-rewrite-incremental-fsync
yes
|
本文转自 结束的伤感 51CTO博客,原文链接:http://blog.51cto.com/wangzhijian/1734868