Redis教程(十) Redis配置文件详解
1 Redis配置详解
在Redis中直接启动redis-server服务时,采用的是默认的配置文件。修改redis.conf配置文件可以按照指定的配置文件来运行Redis服务。
1.1 Redis配置参数表
属性 | 说明 |
daemonize no | # 默认值no,该参数用于定制redis服务是否以守护模式运行。 |
pidfile /var/run/redis.pid | # 默认值/var/run/redis.pid,指定redis服务的进程号文件路径,以守护模式运行时需要配置本参数; |
port 6379 | # 默认值6379,指定redis服务的端口 |
tcp-backlog 511 | # 在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志 |
timeout 0 | # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接 # 0是关闭此设置 |
tcp-keepalive 0 | # TCP keepalive # 在 Linux上,指定值(秒)用于发送 ACKs的时间。注意关闭连接需要双倍的时间。默认为 0。 |
loglevel notice | # 指定日志记录级别,生产环境推荐 notice # Redis总共支持四个级别: debug、verbose、notice、warning,默认为 verbose # debug 记录很多信息,用于开发和测试 # varbose 有用的信息,不像 debug会记录那么多 # notice 普通的 verbose,常用于生产环境 # warning 只有非常重要或者严重的信息会记录到日志 |
logfile "" | # 配置 log文件地址 # 默认值为 stdout,标准输出,若后台模式会输出到 /dev/null。 |
databases 16 | # 可用数据库数,默认值为 16,默认数据库为 0,数据库范围在 0-( database-1)之间 |
快照 | |
stop-writes-on-bgsave-error yes | # 保存数据到磁盘,格式如下 : # save <seconds> <changes> # 指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。 # 相当于条件触发抓取快照,这个可以多个条件配合 # 比如默认配置文件中的设置,就设置了三个条件 # save 900 1 900秒内至少有 1个 key被改变 # save 300 10 300秒内至少有 300个 key被改变 # save 60 10000 60秒内至少有 10000个 key被改变 # save 900 1 # save 300 10 # save 60 10000
|
stop-writes-on-bgsave-error yes | # 后台存储错误停止写。 |
rdbcompression yes | # 存储至本地数据库时(持久化到 rdb文件)是否压缩数据,默认为 yes |
rdbchecksum yes | # RDB文件的是否直接偶像 chcksum |
dbfilename dump.rdb | # 本地持久化数据库文件名,默认值为 dump.rdb |
dir /var/lib/redis-server/ | # 工作目录 # 数据库镜像备份的文件放置的路径。 # 这里的路径跟文件名要分开配置是因为 redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成, # 再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。 # AOF文件也会存放在这个目录下面 # 注意这里必须制定一个目录而不是文件 |
slave-serve-stale-data yes | # 主从复制 .设置该数据库为其他数据库的从数据库 . # 设置当本机为 slav服务时,设置 master服务的 IP地址及端口,在 Redis启动时,它会自动从 master进行数据同步 # slaveof <masterip><masterport> # 当 master服务设置了密码保护时 (用 requirepass制定的密码 ) # slave服务连接 master的密码 # masterauth <master-password> # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式: # 1) 如果 slave-serve-stale-data设置为 yes(默认设置 ),从库会继续响应客户端的请求 # 2) 如果 slave-serve-stale-data是指为 no,出去 INFO和 SLAVOF命令之外的任何请求都会返回一个 # 错误 "SYNC with master in progress" |
slaveread-only yes | # 配置 slave实例是否接受写。写 slave对存储短暂数据(在同 master数据同步后可以很容易地被删除)是有用的,但未配置的情况下,客户端写可能会发送问题。 # 从 Redis2.6后,默认 slave为 read-only |
repl-disable-tcp-nodelay no | # 从库会按照一个时间间隔向主库发送 PINGs.可以通过 repl-ping-slave-period设置这个时间间隔,默认是 10秒 # repl-ping-slave-period 10 # repl-timeout 设置主库批量数据传输时间或者 ping回复时间间隔,默认值是 60秒 # 一定要确保 repl-timeout大于 repl-ping-slave-period # repl-timeout 60 # 在slave socket的 SYNC后禁用 TCP_NODELAY # 如果选择“ yes” ,Redis将使用一个较小的数字 TCP数据包和更少的带宽将数据发送到 slave,但是这可能导致数据发送到 slave端会有延迟 ,如果是 Linux kernel的默认配置,会达到 40毫秒 . # 如果选择 "no",则发送数据到 slave端的延迟会降低,但将使用更多的带宽用于复制 . |
slave-priority 100 | # 如果少于 N个 slave连接,且延迟时间 <=M秒,则 master可配置停止接受写操作。 # 例如需要至少 3个 slave连接,且延迟 <=10秒的配置: # min-slaves-to-write 3 # min-slaves-max-lag 10 # 设置 0为禁用 # 默认 min-slaves-to-write为 0(禁用), min-slaves-max-lag为 10 |
AOF数据备份 | |
appendonly no | # AOF文件名称 (默认 : "appendonly.aof") # appendfilename appendonly.aof # Redis支持三种同步 AOF文件的策略 : # no: 不进行同步,系统去操作 . Faster. # always: always表示每次有写操作都进行同步 . Slow, Safest. # everysec: 表示对写操作进行累积,每秒同步一次 . Compromise. # 默认是 "everysec",按照速度和安全折中这是最好的。 # 如果想让 Redis能更高效的运行,你也可以设置为 "no",让操作系统决定什么时候去执行 # 或者相反想让数据更安全你也可以设置为 "always" # 如果不确定就用 "everysec". # appendfsync always |
appendfsync everysec | # appendfsync no # AOF策略设置为 always或者 everysec时,后台处理进程 (后台保存或者 AOF日志重写 )会执行大量的 I/O操作 # 在某些 Linux配置中会阻止过长的 fsync()请求。注意现在没有任何修复,即使 fsync在另外一个线程进行处理 # 为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite |
no-appendfsync-on-rewrite no | # AOF 自动重写 # 当 AOF文件增长到一定大小的时候 Redis能够调用 BGREWRITEAOF 对日志文件进行重写 # 它是这样工作的: Redis会记住上次进行些日志后文件的大小 (如果从开机以来还没进行过重写,那日子大小在开机的时候确定 ) # 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动 # 同时需要指定一个最小大小用于 AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF文件的情况 # 设置 percentage为 0就关闭这个特性 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
aof-rewrite-incremental-fsync yes | # 当一个子节点重写 AOF文件时,如果启用下面的选项,则文件每生成 32M数据进行同步。 |
Lua脚本 | |
lua-time-limit 5000 | # 一个 Lua脚本最长的执行时间为 5000毫秒( 5秒),如果为 0或负数表示无限执行时间。 |
Log日志 | |
slowlog-log-slower-than 10000 | # Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括 I/O计算比如连接客户端,返回结果等,只是命令执行时间 # 可以通过两个参数设置 slow log:一个是告诉 Redis执行超过多少时间被记录的参数 slowlog-log-slower-than(微妙 ), # 另一个是 slow log的长度。当一个新命令被记录的时候最早的命令将被从队列中移除 # 下面的时间以微妙为单位,因此 1000000代表一秒。 # 注意指定一个负数将关闭慢日志,而设置为 0将强制每个命令都会记录 |
slowlog-max-len 128 | # 对日志长度没有限制,只是要注意它会消耗内存 # 可以通过 SLOWLOG RESET回收被慢日志消耗的内存 # 推荐使用默认值 128,当慢日志超过 128时,最先进入队列的记录会被踢出 |
事件通知 | |
notify-keyspace-events "" | # 当事件发生时, Redis可以通知 Pub/Sub客户端。 # 可以在下表中选择 Redis要通知的事件类型。事件类型由单个字符来标识: # K Keyspace事件,以 _keyspace@<db>_的前缀方式发布 # E Keyevent事件,以 _keysevent@<db>_的前缀方式发布 # g 通用事件(不指定类型),像 DEL, EXPIRE, RENAME,… # $ String命令 # s Set命令 # h Hash命令 # z 有序集合命令 # x 过期事件(每次 key过期时生成) # e 清除事件(当 key在内存被清除时生成) # A g$lshzxe的别称,因此”AKE”意味着所有的事件 # notify-keyspace-events带一个由 0到多个字符组成的字符串参数。空字符串意思是通知被禁用。 # 例子:启用 list和通用事件: # notify-keyspace-events Elg # 默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。 # 注意如果你不指定至少 K或 E之一,不会发送任何事件。 |
高级配置 |
|
hash-max-zipmap-entries 512
hash-max-zipmap-value 64 | # 当 hash中包含超过指定元素个数并且最大的元素没有超过临界时, # hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值 # Redis Hash对应 Value内部实际就是一个 HashMap,实际这里会有 2种不同实现, # 这个 Hash的成员比较少时 Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap结构,对应的 valueredisObject的 encoding为 zipmap, # 当成员数量增大时会自动转成真正的 HashMap,此时 encoding为 ht。 |
list-max-ziplist-entries 512 list-max-ziplist-value 64 | # 和 Hash一样,多个小的 list以特定的方式编码来节省空间。 # list数据类型节点值大小小于多少字节会采用紧凑存储格式。 |
set-max-intset-entries 512 | # set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。 |
zset-max-ziplist-entries 128 zset-max-ziplist-value 64 | # 和 hashe和 list一样 ,排序的 set在指定的长度内以指定编码方式存储以节省空间 # zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。 |
activerehashing yes | # Redis将在每 100毫秒时使用 1毫秒的 CPU时间来对 redis的 hash表进行重新 hash,可以降低内存的使用 # 当你的使用场景中,有非常严格的实时性需要,不能够接受 Redis时不时的对请求有 2毫秒的延迟的话,把这项配置为 no。 # 如果没有这么严格的实时性要求,可以设置为 yes,以便能够尽可能快的释放内存。 |
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb60 client-output-buffer-limit pubsub 32mb 8mb60 | # 客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快, # 可用于强制断开连接(一个常见的原因是一个发布 /订阅客户端消费消息的速度无法赶上生产它们的速度)。 # 可以三种不同客户端的方式进行设置: # normal -> 正常客户端 # slave -> slave和 MONITOR客户端 # pubsub -> 至少订阅了一个 pubsub channel或 pattern的客户端 # 每个 client-output-buffer-limit语法 : # client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds> # 一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。 # 例如,如果硬限制为 32兆字节和软限制为 16兆字节 /10秒,客户端将会立即断开 # 如果输出缓冲区的大小达到 32兆字节,客户端达到 16兆字节和连续超过了限制 10秒,也将断开连接。 # 默认 normal客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据, # 只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。 # 把硬限制和软限制都设置为 0来禁用该特性 |
hz 10 | # Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除过期的 Key,等等。 # 不是所有的任务都以相同的频率执行,但 Redis依照指定的“Hz”值来执行检查任务。 # 默认情况下,“ Hz”的被设定为 10。 # 提高该值将在 Redis空闲时使用更多的 CPU时,但同时当有多个 key同时到期会使 Redis的反应更灵敏,以及超时可以更精确地处理。 # 范围是 1到 500之间,但是值超过 100通常不是一个好主意。 # 大多数用户应该使用 10这个预设值,只有在非常低的延迟的情况下有必要提高最大到 100。 |
--以上为《Redis教程(十) Redis配置文件详解》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。
——厚积薄发(yuanxw)