redis学习笔记之四:Redis的配置详解

n Config命令
可以在redis-cli里面使用config命令来获取或者设置Redis配置,可以不用重新启动Redis。命
令是config get/set 配置名。注意并不是所有的配置参数都可以通过Config来在运行期修改,比如:
daemonize、pidfile、port、database、dir、slaveof、rename-command等
n redis.conf的配置介绍
1:开头定义了一些基本的度量单位,只支持bytes,不支持bit
2:配置中对单位的大小写不敏感
3:配置中大致包含如下部分:
(1)通用部分
(2)快照部分:Redis的RDB持久化相关的配置
(3)复制部分
(4)安全部分
(5)限制部分
(6)追加模式部分
(7)LUA脚本部分
(8)慢日志部分
(9)事件通知部分
(10)高级配置部分
 

n 通用部分
1:daemonize:是否以后台daemon方式运行
2:pidfile:pid文件位置,默认会生成在/var/run/redis.pid
3:bind:指定要绑定的IP,默认Redis会响应本机所有可用网卡的连接请求
4:port:监听的端口号,默认服务端口是6379,0表示不监听端口;如果redis不监听端口,可以通过unix
socket方式来接收请求,可以通过unixsocket配置项来指定unix socket文件的路径,并通过
unixsocketperm来指定文件的权限
5:tcp-backlog:设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队
列 + 已经完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注
意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和
tcp_max_syn_backlog两个值来达到想要的效果
6:timeout:连接空闲超时时间,0表示永不关闭
7:tcp-keepalive:单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60
8:loglevel:log信息级别,共分四级,即debug、verbose、notice、warning
9:logfile:log文件位置,如果设置为空字符串,则redis会将日志输出到标准输出。假如你在daemon情况
下将日志设置为输出到标准输出,则日志会被写到/dev/null中
10:syslog-enabled:是否把日志输出到syslog中
11:syslog-ident:指定syslog里的日志标志
12:syslog-facility:指定syslog设备,值可以是USER或LOCAL0-LOCAL7
13:databases:开启数据库的数量,编号从0开始,默认的数据库是编号为0的数据库,可以使用
select <DBid>来选择相应的数据库
 

n 限制部分
1:maxclients:设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。当你
无法设置进程文件句柄限制时,redis会设置为当前的文件句柄限制值减去32,因为redis会为自
身内部处理逻辑留一些句柄出来。如果达到了此限制,redis则会拒绝新的连接请求,并且向这
些连接请求方发出“max number of clients reached”以作回应。
2:maxmemory:设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数
据,移除规则可以通过maxmemory-policy来指定。如果redis无法根据移除规则来移除内存中的
数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信
息,比如SET、LPUSH等。但是对于无内存申请的指令,仍然会正常响应,比如GET等。
如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需
要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用
考虑这个因素
3:maxmemory-samples:设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,
所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个
4:maxmemory-policy:设置内存移除规则,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都会针对写请求返回错误信息

n 快照部分
1:save * *:保存快照的频率,第一个*表示多长时间,单位是秒,第二个*表示至少执行写操作的次数;
在一定时间内至少执行一定数量的写操作时,就自动保存快照;可设置多个条件。
如果想禁用RDB持久化的策略,只要不设置任何save指令,或者给save传入一个空字符串参数也可以
如果用户开启了RDB快照功能,那么在Redis持久化数据到磁盘时如果出现失败,默认情况下,
Redis会停止接受所有的写请求。这样做的好处在于可以让用户很明确的知道内存中的数据和磁盘上的
数据已经存在不一致了。如果下一次RDB持久化成功,redis会自动恢复接受写请求。
2:stop-writes-on-bgsave-error:如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制
这种不一致,那么在快照写入失败时,也能确保redis继续接受新的写请求
3:rdbcompression:对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用
LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能
4:rdbchecksum:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约
10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
5:dbfilename:数据快照文件名(只是文件名,不包括目录),默认dump.rdb
6:dir:数据快照的保存目录(这个是目录),默认是当前路径
 

n 追加模式部分
1:appendonly:是否开启AOF
2:appendfilename:设置AOF的日志文件名
3:appendfsync:设置AOF日志如何同步到磁盘,fsync()调用,用来告诉操作系统立即将缓存的指令写入磁
盘,有三个选项:
(1)always:每次写都强制调用fsync,这种模式下,redis会相对较慢,但数据最安全
(2)everysec:每秒启用一次fsync
(3)no:不调用fsync()。而是让操作系统自行决定sync的时间。这种模式下,redis的性能会最快
4:no-appendfsync-on-rewrite:设置当redis在rewrite的时候,是否允许appendsync。因为redis进程在
进行AOF重写的时候,fsync()在主进程中的调用会被阻止,也就是redis的持久化功能暂时失效。默认
为no,这样能保证数据安全
5:auto-aof-rewrite-min-size:设置一个最小大小,是为了防止在aof很小时就触发重写
6:auto-aof-rewrite-percentage:设置自动进行AOF重写的基准值,也就是重写启动时的AOF文件大小,假
如redis自启动至今还没有进行过重写,那么启动时aof文件的大小会被作为基准值。这个基准值会和当
前的aof大小进行比较。如果当前aof大小超出所设置的增长比例,则会触发重写。如果设置auto-aofrewrite-percentage为0,则会关闭此重写功能

n 复制部分
1:slaveof :指定某一个redis作为另一个redis的从服务器,通过指定IP和端口来设置主redis。建议为从
redis设置一个不同频率的快照持久化的周期,或者为从redis配置一个不同的服务端口
2:masterauth:如果主redis设置了验证密码的话(使用requirepass来设置),则在从redis的配置中要使
用masterauth来设置校验密码,否则的话,主redis会拒绝从redis的访问请求
3:slave-serve-stale-data:设置当从redis失去了与主redis的连接,或者主从同步正在进行中时,redis
该如何处理外部发来的访问请求 。
如果设置为yes(默认),则从redis仍会继续响应客户端的读写请求。如果设置为no,则从
redis会对客户端的请求返回“SYNC with master in progress”,当然也有例外,当客户端发来INFO
请求和SLAVEOF请求,从redis还是会进行处理。从redis2.6版本之后,默认从redis为只读。
4:slave-read-only:设置从Redis为只读
5:repl-ping-slave-period:设置从redis会向主redis发出PING包的周期,默认是10秒
6:repl-timeout:设置主从同步的超时时间,要确保这个时限比repl-ping-slave-period的值要大,否则
每次主redis都会认为从redis超时。

7:repl-disable-tcp-nodelay:设置在主从同步时是否禁用TCP_NODELAY,如果开启,那么主redis
会使用更少的TCP包和更少的带宽来向从redis传输数据。但是这可能会增加一些同步的延迟,大
概会达到40毫秒左右。如果关闭,那么数据同步的延迟时间会降低,但是会消耗更多的带宽。
8:repl-backlog-size:设置同步队列长度。队列长度(backlog)是主redis中的一个缓冲区,在与
从redis断开连接期间,主redis会用这个缓冲区来缓存应该发给从redis的数据。这样的话,当
从redis重新连接上之后,就不必重新全量同步数据,只需要同步这部分增量数据即可
9:repl-backlog-ttl:设置主redis要等待的时间长度,如果主redis等了这么长时间之后,还是无
法连接到从redis,那么缓冲队列中的数据将被清理掉。设置为0,则表示永远不清理。默认是1
个小时。
10:slave-priority:设置从redis优先级,在主redis持续工作不正常的情况,优先级高的从redis
将会升级为主redis。而编号越小,优先级越高。当优先级被设置为0时,这个从redis将永远也
不会被选中。默认的优先级为100。
11:min-slaves-to-write:设置执行写操作所需的最少从服务器数量,如果至少有这么多个从服务
器, 并且这些服务器的延迟值都少于 min-slaves-max-lag 秒, 那么主服务器就会执行客户端
请求的写操作

n 安全部分
当redis-server处于一个不太可信的网络环境中时,可以要求redis客户端在向
redis-server发送请求之前,先进行密码验证
1:requirepass:设置请求的密码
2:rename-command:对命令进行重命名,只读的从redis并不适合直接暴露给不可信的客户
端。为了尽量降低风险,可以使用rename-command指令来将一些可能有破坏力的命令重命
名,避免外部直接调用。
如果要禁用某些命令,那就重命名为“”就可以了
n Lua脚本部分
1:lua-time-limit:设置ua脚本的最大运行时间,单位是毫秒,如果此值设置为0或负数,则
既不会有报错也不会有时间限制
n 慢日志部分
1:slowlog-log-slower-than:判断是否慢日志的执行时长,单位是微秒,负数则会禁用慢日
志功能,而0则表示强制记录每一个命令
2:slowlog-max-len:慢日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日
志队列中被移除。
n 事件通知部分
1:notify-keyspace-events:设置是否开启Pub/Sub 客户端关于键空间发生的事件,有很多
通知的事件类型,默认被禁用,因为用户通常不需要该特性,并且该特性会有性能损耗,
设置成空字符串就是禁用
n 高级配置部分
1:有关哈希数据结构的一些配置项:当hash只有少量的entry,并且最大的entry所占空间没
有超过指定的限制时,会用一种节省内存的数据结构来编码:
(1)hash-max-ziplist-entries:设置使用ziplist的最大的entry数
(2)hash-max-ziplist-value:设置使用ziplist的值的最大长度
2:有关列表数据结构的一些配置项:数据元素较少的list,可以用另一种方式来编码从而节
省大量空间:
(1)list-max-ziplist-entries:设置使用ziplist的最大的entry数
(2)list-max-ziplist-value:设置使用ziplist的值的最大长度
3:有关Set数据结构的配置项:当set数据全是十进制64位有符号整型数字构成的字符串时,
设置set使用一种紧凑编码格式来节省内存的最大长度:
(1)set-max-intset-entries:设置使用紧凑编码的最大的entry数

12:min-slaves-max-lag:设置最大连接延迟的时间, min-slaves-to-write和min-slaves-max-lag
中有一个被置为0,则这个特性将被关闭。默认情况下min-slaves-to-write为0,而min-slaves
max-lag为10

4:有关有序集合数据结构的配置项:有序集合也可以用一种特别的编码方式来节省大量空
间,这种编码只适合长度和元素都小于下面限制的有序集合:
(1)zset-max-ziplist-entries:设置使用ziplist的最大的entry数
(2)zset-max-ziplist-value:设置使用ziplist的值的最大长度
5:HyperLogLog 稀疏表示字节限制:这个限制包含了16个字节的头部,当一个HyperLogLog使
用sparse representation,超过了这个限制,它就会转换到dense representation上
(1)hll-sparse-max-bytes:设置HyperLogLog 稀疏表示的最大字节数
6:关于是否启用哈希刷新的配置项:启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新
Redis的主哈希表(顶级键值映射表),redis所用的哈希表实现采用延迟哈希刷新机制:
对一个哈希表操作越多,哈希刷新操作就越频繁;反之,如果服务器是空闲的,那么哈希
刷新就不会完成,哈希表就会占用更多的一些内存而已。默认是每秒钟进行10次哈希表刷
新,用来刷新字典,然后尽快释放内存
(1)activerehashing:设置是否启用哈希刷新,默认是yes
7:有关重写aof的配置项:当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生
成32M数据会被同步。为了增量式的写入硬盘并且避免大的延迟,这个指令是非常有用的
(1)aof-rewrite-incremental-fsync:默认是yes
8:关于客户端输出缓冲的控制项:可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客
户端,一个常见的原因是一个发布/订阅客户端消费消息的速度无法赶上生产它们的速度,可以对三种
不同的客户端设置不同的限制:
(1)normal:正常客户端
(2)slave:slave和 MONITOR 客户端
(3)pubsub:至少订阅了一个pubsub channel或pattern的客户端
语法是:client-output-buffer-limit <class><hard limit> <soft limit> <soft 持续时间单位秒>
默认normal客户端不做限制,因为他们在不主动请求时不接收数据;pubsub和slave客户端会有
一个默认值;把硬限制和软限制都设置为0来禁用该功能,默认配置如下:
(1)client-output-buffer-limit normal 0 0 0
(2)client-output-buffer-limit slave 256mb 64mb 60
(3)client-output-buffer-limit pubsub 32mb 8mb 60
9:有关频率的配置项:Redis调用内部函数来执行许多后台任务,Redis依照指定的“hz”值来执行检查任
务,默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个
key同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理。范围是1到500之间,但是值超过
100通常不是一个好主意。大多数用户应该使用10这个默认值,只有在非常低的延迟要求时有必要提高
到100
(1)hz:设置检查任务的频率
 

猜你喜欢

转载自blog.csdn.net/u010800970/article/details/81348931
今日推荐