Redis详解之Rddis配置文件详解(如有错误和缺失请联系补充)

首先关于redis配置文件的位置,window系统下解压就会看到,linux要看你将压缩文件放到哪个文件中,一般返稿usr/local/bin 目录下,下面就来正式查看redis的配置文件,基本涵盖的所有的配置,:

这是最开始关于存储的单位的介绍,我们可以看到对unit单位的大小写是不敏感的

 2.包含,我们可以将多个配置文件组合成为一个,也就是一个配置文件可以包含多个配置文件

3.network 网络配置 ,第一个就是绑定的ip ,可以看到上边给出了三个例子,我们现在绑定是本机,如果想要绑定远程,就可以选用第三个配置方式,所有

 protected-mode yes就是一个保护模式默认是开启的,一般不用改

port:就是绑定的端口,搭建集群的时候需要更改端口

tcp-backlog:511

此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。这个是可以优化的,可以改为2048

 timeout 0:当客户端闲置多少秒时关闭连接,如果为0,代表关闭该功能。

 tcp-keepalive:长连接的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,且有可能导致在一个无效的数据链路层面发送业务数据,结果就是发送失败。所以服务器端要做到快速感知失败,减少无效链接操作,这就有了TCP的Keepalive(保活探测)机制,tcp分为长连接和短连接,短连接环境下,数据交互完毕后,主动释放连接;长连接具体原理就不解释了

 

 redis默认是不以守护进程执行的,可以将no改为yes,让redis在后台运行

 

pidfile: 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定

loglevel:时日志的级别

logfile:是日志文件的名字

 数据库的数量为16,设置数据库的数量,可以使用SELECT 命令在连接上指定数据库id

就是我们启动的时候显示的哪个logo

setproctitle:是自定义进程名称。

 stop-writes-on-bgsave-error :停止写入当持久化出现错误时

rdbcompression :yes  指定存储至本地数据库时是否压缩数据,默认是yes,redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件扁的巨大

rdbchecksum:对rdb文件进行校验

 这个是redis持久化时使用rdb模式生成的文件的名字,默认为dump.rdb

还有一个操作就是定义rdb的规则

save 900 1 :在900秒内,至少有一个key发生变动则进行持久化操作

save 300 10

save 60 10000

rdb-del-sync-files: no 文件是否删除同步锁

dir: ./ rdb文件保存目录

下边就是关于主从复制方面的了,主从复制很关键的目的就是实现读写分离,来减少内存的压力,所以大部分都会让主机只写,从机只读,也就是redis的集群,一个集群最小规模也要达到一主二从,可以通过配置文件直接改主从关系,也可以通过命令来改

replica-serva-stale-data:此选项为以前的 slave-serve-stale-data,replicas 节点和 master 节点断开连接后,replicas 节点根据 replica-serve-stale-data 选项的配置可能有以下行为:

  • 选项设置为 yes(默认值),replicas 节点会继续向客户端提供服务,此时返回给客户端的数据很可能是过期的
  • 选项设置为 no,除了 INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, HOST, 和 LATENCY 命令外的其他命令,replicas 节点都会返回 "SYNC with master in progress" 给客户端

replica:设置 replicas 节点是否只读,从 Redis 2.6 开始此选项的默认值为 yes。 需要注意的是只读的 replicas 节点并没有设计为会暴露给网络上不受信任的客户端使用的。 你需要对其进行保护以防实例被滥用。并且只读的 replicas 节点导出了所有如 CONFIG,DEBUG,等管理命令。 你可以使用 'rename-command' 将所有管理/危险 命令进行映射以提高安全性。 

repl-diskless-sync: DISKLESS REPLICATION 目前是实验性功能

当一个不能续传或者新的 replicas 需要进行“全量同步”时。一个 RDB 文件需要由 master 传送到 replicas。 根据 repl-diskless-sync 选项的不同,RDB 文件有以下两种传输方式:

  1. Disk-backed:Redis master 节点创建一个新的进程并且将 RDB 文件写入磁盘。然后文件通过父进程传输给 replicas 节点
  2. Diskless:Redis master 节点一个新的进程并且直接将 RDB 文件写入到 replica 的 socket 中,不写到磁盘

当进行 disk-backed 复制时,当 RDB 文件生成完毕,多个 replicas 通过排队来同步 RDB 文件。 当进行 diskless 复制时,master 节点会等待一段时间再传输以期望会有多个 replicas 连接进来,这样 master 节点就可以同时同步到多个 replicas 节点。

repl-diskless-sync-delay:当启用 diskless 复制后,可以通过此选项设置 master 节点创建子进程前等待的时间,单位为秒。

repl-ping-replica-period:Replicas 发送 PING 到 master 的间隔,默认值为 10 秒。在下方蓝色注释里。

repl-timeout:这个配置截图没截全,剩下的部分就是以文本的形式在下方展现

redis配置文件中对repl-timeout的参数解释如下:
# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
# 2) Master timeout from the point of view of slaves (data, pings).
# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).

此选项用于设置以下情形的 timeout 判断:

  1. 从 replica(从节点) 节点的角度来看的 SYNC 过程中的 I/O 传输
  2. 从 replica 节点的角度来看的 master 的 timeout(如 data,pings)
  3. 从 master (主节点)节点角度来看的 replica 的 timeout(如 REPLCONF ACK pings)

需要注意的是,此选项必须大于 repl-ping-replica-period,否则在低业务量的情况下会经常发生 timeout。当redis检测到repl-timeout超时(默认值60s),将会关闭主从之间的连接,redis slave发起重新建立主从连接的请求。对于内存数据集比较大的系统,可以增大repl-timeout参数。这两个配置主要用于处理主从复制是复制超时的时候,可以做一些优化。

repl-diskless-load:说明:是否使用无磁盘加载,有三项:
disabled:不要使用无磁盘加载,先将rdb文件存储到磁盘
on-empty-db:只有在完全安全的情况下才使用无磁盘加载
swapdb:解析时在RAM中保留当前db内容的副本,直接从套接字获取数据。
默认配置项:repl-diskless-load disabled

replica-priority:这是 replicas 节点通过 INFO 接口给出的信息,默认值为 100。 当 master 节点无法正常工作后 Redis Sentinel(哨兵模式) 通过这个值来决定将哪个 replicas 节点提升为 master 节点。

这个数值越小表示越优先进行提升。如有三个 replicas 节点其 priority 值分别为 10,100,25, Sentinel 会选择 priority 为 10 的节点进行提升。

这个值为 0 表示 replica 节点永远不能被提升为 master 节点。

这是redis的安全模块:

 acllog-max-len:说明:ACL日志存储在内存中并消耗内存,设置此项可以设置最大值来回收内存。
默认配置项:acllog-max-len 128

还有两个命令一个就是修改密码,一个就是修改命令的名字

requirepass:设置Redis连接密码
默认配置项:requirepass foobared

rename-command:将命令重命名。为了安全考虑,可以将某些重要的、危险的命令重命名。当你把某个命令重命名成空字符串的时候就等于取消了这个命令。
默认配置项:rename-command CONFIG " "

 惰性删除模块:

lazyfree-lazy-eviction:针对redis内存使用达到maxmeory,并设置有淘汰策略时,在被动淘汰键时,是否采用lazy free机制。因为此场景开启lazy free, 可能使用淘汰键的内存释放不及时,导致redis内存超用,超过maxmemory的限制。
默认配置项:lazyfree-lazy-eviction no

lazyfree-lazy-expire:针对设置有TTL的键,达到过期后,被redis清理删除时是否采用lazy free机制。此场景建议开启,因TTL本身是自适应调整的速度。
默认配置项:lazyfree-lazy-expire no

lazyfree-lazy-server-del:针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。如rename命令,当目标键已存在,redis会先删除目标键,如果这些目标键是一个big key,那就会引入阻塞删除的性能问题。 此参数设置就是解决这类问题,建议可开启。
默认配置项:lazyfree-lazy-server-del no

replica-lazy-flush:针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景,参数设置决定是否采用异常flush机制。如果内存变动不大,建议可开启。可减少全量同步耗时,从而减少主库因输出缓冲区爆涨引起的内存使用增长。
默认配置项:replica-lazy-flush no

lazyfree-lazy-user-del:对于替换用户代码DEL调用的情况,也可以这样做
使用UNLINK调用是不容易的,要修改DEL的默认行为
命令的行为完全像UNLINK。
默认配置项:lazyfree-lazy-user-del no

(OOM killer)是为了在内存不足的情况下,杀掉消耗内存最多、优先级最低的任务,从而保障系统不被搞挂。这里有两个取决因素:(1)oom_score内核通过内存消耗计算得出 oom_score_adj允许用于自定义,等同于优先级,优先级越高值越小(-1000 ~1000)。
当内存紧张的时候,内核通过 oom = oom_score + oom_score_adj 计算出分数最高的进程,向其发送关闭信号。
这里我也不知道是否准确,应该是这样

disabled-thp:这个就是一个thp功能的开启与否,关于thp我也不太懂,有懂得可以给我解释解释。Linux kernel在2.6.38内核增加了THP特性, 支持大内存页(2MB) 分配, 默认开启。 当开启时可以降低fork子进程的速度, 但fork操作之后, 每个内存页从原来4KB变为2MB, 会大幅增加重写期间父进程内存消耗。 同时每次写命令引起的复制内存页单位放大了512倍, 会拖慢写操作的执行时间, 导致大量写操作慢查询, 例如简单的incr命令也会出现在慢查询中。 因此Redis日志中建议将此特性进行禁用

 appendonly no 是否开启, 默认持久化方式为rdb,这是redis另一种持久化方式,aof

 appendfilename "appendonly.aof" :aof文件名

appendfsync everysec :每秒同步一次,这个执行的逻辑是,查测后台是否有fsync任务在执行,如果有,判断上次距离现在的时间,如果大于2S,则阻塞,否则直接进入后台队列。大于2s则阻塞直到写入成功,并且后台会留下一个日志,增加一个记录,并且增加info中对应的aof-delayed-fsync的值,讲这个是因为后边的 no-appendfsync-on-rewrite参数的配置。

appendfsync no :从不

appendfsync always :每次修改同步一次

 上边讲了 everysec的执行原理,我们的这个Redis使用AOF进行持久化(appendonly),appendfsync策略采用的是everysec刷盘。但是AOF随着时间推移,文件会越来越大,因此,Redis还有一个rewrite策略,实现AOF文件的减肥,但是结果的幂等的。我们no-appendfsync-on-rewrite的策略是 no. 这就会导致在进行rewrite操作时,appendfsync会被阻塞。如果当前AOF文件很大,那么相应的rewrite时间会变长,appendfsync被阻塞的时间也会更长。

 auto-aof-rewrite-percentage:自动改写百分比 如果为0则不重写

auto-aof-rewrite-min-size:自动重写的最小大小

 aof-load-truncated: 启用aof之后,redis重启默认会使用aof文件加载数据,此配置即是允许redis自行对aof文件进行截断(可能最后一行有问题)以保证redis正常启动。

当 aof-use-rdb-preamble 设置为 yes 时,表示开启 RDB-AOF 混合持久化模式

在该模式下,AOF 重写产生的文件将同时包含 RDB 格式的内容和 AOF 格式的内容,该文件的前半段是 RDB 格式的全量数据,而后半段是 Redis 命令格式的增量数据

 lua脚本模块:

lua-time-limit:一个脚本的最长的执行时间,单位为毫秒,如果为0或者为负数表示无线执行时间

 慢查询日志模块:

slowlog-log-slower-than:对执行时间大于多少微妙的查询进行记录。

slowlog-max-len:它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。

 延时监控模块:

latency-monitor-threshold:能够采样不同的执行路径来知道redis阻塞在哪里。这使得调试各种延时问题变得简单,设置一个毫秒单位的延时阈值来开启延时监控。 默认值为0

 事件通知模块:

notify——keyspace-events:键事件通知,可用参数:
K 键空间通知,所有通知以 keyspace@ 为前缀.
E 键事件通知,所有通知以 keyevent@ 为前缀
g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 过期事件:每当有过期键被删除时发送
e 驱逐(evict)事件:每当有键因为 maxmemory 策略而被删除时发送
A 参数 g$lshzxe 的别名
书写:notify-keyspace-events Ex
默认值notify-keyspace-events " "

 高级配置模块:

hash-max-ziplist-entries:这个参数指的是ziplist中允许存储的最大条目个数,默认为512,建议为128。

hash-max-ziplist-value:ziplist中允许条目value值最大字节数,默认为64,建议为1024。

list-max-ziplist-size:ziplist列表最大值,默认存在五项:
-5:最大大小:64 Kb <——不建议用于正常工作负载
-4:最大大小:32 Kb <——不推荐
-3:最大大小:16 Kb <——可能不推荐
-2:最大大小:8 Kb<——很好
-1:最大大小:4 Kb <——好

list-compress-depth: 一个quicklist两端不被压缩的节点个数。0: 表示都不压缩。这是Redis的默认值,1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。
默认配置项:list-compress-depth 0

set-max-intset-entries:当集合中的元素全是整数,且长度不超过set-max-intset-entries(默认为512个)时,redis会选用intset作为内部编码,大于512用set。
默认配置项:set-max-intset-entries 512

zset-max-ziplist-entries:当有序集合的元素小于zset-max-ziplist-entries配置(默认是128个),同时每个元素的值都小于
默认配置项:zset-max-ziplist-entries 128
zset-max-ziplist-value:(默认是64字节)时,Redis会用ziplist来作为有序集合的内部编码实现,ziplist可以有效的减少内存的使用。

hll-sparse-max-bytes:value大小 小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。

stream-node-max-bytes:Streams单个节点的字节数

stream-node-max-entries:以及切换到新节点之前可能包含的最大项目数。
 

 activerehashing:说明:主动重新散列每100毫秒CPU时间使用1毫秒,以帮助重新散列主Redis散列表(将顶级键映射到值)。

client-output-buffer-limit normal:对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。

client-output-buffer-limit replica:对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。

client-output-buffer-limit pubsub:对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。

 

hz:默认情况下,hz设置为10.提高值时,在Redis处于空闲状态下,将使用更多CPU。范围介于1到500之间,大多数用户应使用默认值10,除非仅在需要非常低延迟的环境中将此值提高到100。

dynamic-hz:启用动态HZ时,实际配置的HZ将用作基线,但是一旦连接了更多客户端,将根据实际需要使用配置的HZ值的倍数。

 aof-rewrite-incremental-fsync:当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步。

rdb-save-incremental-fsync:当redis保存RDB文件时,如果启用了以下选项,则每生成32 MB数据将对文件进行fsync。 这对于以递增方式将文件提交到磁盘并避免大延迟峰值非常有用。

这个是碎片整理模块:这个模块还有一些其他的命令

activedefrag :是否启用碎片整理
默认配置项:activedefrag no

active-defrag-ignore-bytes:启动活动碎片整理的最小碎片浪费量
默认配置项:active-defrag-ignore-bytes 100mb

active-defrag-threshold-lower:启动碎片整理的最小碎片百分比
默认配置项:active-defrag-threshold-lower 10

active-defrag-threshold-upper:使用最大消耗时的最大碎片百分比
默认配置项:active-defrag-threshold-upper 100

active-defrag-cycle-min:在CPU百分比中进行碎片整理的最小消耗
默认配置项:active-defrag-cycle-min 1

active-defrag-cycle-max:在CPU百分比达到最大值时,进行碎片整理
默认配置项:active-defrag-cycle-max 25

active-defrag-max-scan-fields:从set / hash / zset / list 扫描的最大字段数
默认配置项:active-defrag-max-scan-fields 1000

jemalloc-bg-thread:默认情况下,用于清除的Jemalloc后台线程是启用的。也就是清除脏页。
 

 还有这个板块,就是当redis内存达到上限之后的处理策略。

############################## MEMORY MANAGEMENT ################################
# 在内存达到上限后的处理策略
# volatile-lru:只对设置了过期时间的key进行LRU
# allkeys-lru : 删除lru算法的key   
# volatile-random:随机删除即将过期key   
# allkeys-random:随机删除   
# volatile-ttl : 删除即将过期的   
# noeviction : 永不过期,返回错误
#maxmemory-policy noeviction 默认是noeviction

 这就是基本大部分的redis的配置文件的内容,这个文章可以说是爆肝了

如有错误请联系,如有缺失可以联系我,然后进行添加!!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值