文章目录
- 1.1 redis.conf
1.1 redis.conf
Redis的有些参数是默认的,这里说的默认是指redis的配置文件中没有配置相关参数,那么相关参数是有默认值的。
## Software version: Redis-4.0.14
##
##
## Basic parameters
bind 172.16.1.21
# Redis实例监听的IP地址,可以绑定多个IP地址(空格分开);
# 默认绑定127.0.0.1,只有本机的网卡可以访问,但要注意
# 操作系统本身防火墙的相关规则;
"# PS:它是无法进行在线更改的哈"
protected-mode yes
# 是否开启安全模式,默认是yes,若想关闭,设置成no就行;
# 开启后,只能通过bind参数绑定的IP地址去连接Redis实例;
# 该参数的默认值是真默认(你的配置文件中不设置,默认就是yes)
"# PS: 它是可以在线进行更改的;"
port 6379
# Redis实例监听的端口,默认是6379,具体用什么端口根据你情况可自定义;
"# PS:它是无法进行在线更改的哈"
requirepass chenliang
# 设置连接Redis实例的认证密码,默认是没有值的(连接时就不需要进行认证)
# 没设置时,连接redis实例是不需要指定密码的;
# 在主从复制中,若Master用它指定了密码,则需要告诉Slave;
"# 它是可以在线更改的,生产中不要随便更改redis的密码,要考虑到业务(客户端、架构、脚本)"
daemonize yes
# 是否以守护进程启动,默认是no,建议设置成yes(要事先在配置文件中设置好了再启动)
# 这个参数的值决定着你用命令或脚本启动的方式
# 我脚本中的启动redis的命令为 redis-server path/redis.conf & <== 让后台启动
"# PS:这个参数是无法在线进行更改的哈"
databases 16
# 设置可用的数据库个数,默认值是16(表示有16个库,库名是0~15,没有16号库,你用select 16看能不能切换嘛);
# 该参数的默认值是真默认(你的配置文件中不设置该参数默认值就是16);
# 当我们连接redis后不进行切换时,默认是在0号数据库下面;
# 库的切换命令是select,例如:select 10 # 切换至10号库下面;
"# PS:这个参数是无法在线进行更改的哈"
syslog-enabled no
# 是否将Redis实例的日志写入操作系统的日志中
# 默认是no,默认值就好
"# 它是无法在线进行更改的哈"
loglevel notice
# 设置Redis实例记录日志到日志文件中的级别;
# 默认就是notice(通知)级别,生产中建议设置成该级别;
# 同时还有debug、verbose、warning三种级别;
"# PS:它是可以在线更改更改的哈"
logfile /data/redis/6379/logs/redis_6379.log
# 设置redis实例日志文件的存放路径和文件名
"# PS:它是无法在线更改的哈"
pidfile /data/redis/6379/run/redis_6379.pid
# 设置Redis实例PID文件的保存路径和文件名
# 默认值是:/var/run/redis.pid
"# PS:它无法在线进行更改的哈"
unixsocket /data/redis/6379/run/redis.sock
# 设置redis实例的socket文件,
"# 默认没有开启;且不能在线进行设置;"
# 开启后的连接方式为:redis-cli -s socket -a 密码
unixsocketperm 700
# 设置unixsocket文件的权限,不设置时默认是755
"# 是不能在线进行设置和修改的哈"
dir /data/redis/6379/data/ "很重要的哈"
# 持久化(不管是RDB还是AOF,只要开启了的)数据的保存路径,该参数的默认值(不设置的情况下)是./
# 需要根据部署情况进行另外设置;若不配置或设置成"./",数据保存在什么地方叫?
# 第一种情况:我用shell连接的是redis用户,我自己写了redis的启停脚本,保存到/A目录一下
# A:启动redis是用脚本来启动的,启动方式是:( cd /A && ./脚本 start )
# B:当达到持久化的条件或你执行bgsav和save,持久化的数据就保存到/A目录下(文件体现)
# C:当停止redis服务时(不管是 "/A/脚本 stop" 还是 "cd /A && ./脚本 stop" ),数据还是在/A目录下
# D:启动时若还想加载/A目录下的数据(不修改配置文件的情况下),你启动时就得用:cd /A && ./脚本 start 来启动;
# 假如是用 "/A/脚本 start"命令在/tmp目录来启动,那么是没有数据进行加载的。新产生的数据就是在/tmp目录下了
# 假如是用 "/A/脚本 start"命令在/mnt目录来启动,那么是没有数据进行加载的。新产生的数据就是在/mnt目录下了
#
# 第二种情况:我用shell连接的是redis用户,我自己写了redis的启停脚本,保存到/A目录一下
# A:启动redis是用脚本来启动的,启动方式是:( /A/脚本 start )
# B:当达到持久化的条件或你执行bgsav和save,持久化的数据就保存到redis用户的家目录(/home/redis/)下
# C:当停止redis服务(不管是 "/A/脚本 stop" 还是 "cd /A && ./脚本 stop"),数据还是在(/home/redis/)目录下
# D:启动时若还想加载/hotm/redis/目录下的数据(不修改配置文件的情况下),你启动时就得用:/A/脚本 start 命令
# 假如是用 "cd /A && ./脚本 start"命令来启动,那么是没有数据进行加载的。新产生的数据就是在/A目录下了
#
# 该参数的值是可在线进行修改的,前提是你启动前你的配置文件中没对config命令做别名或者禁用
# 修改例如:config set dir "/tmp"
## Client connection parameters
maxclients 10000
# 设置同一时间最大客户端连接数,默认是无限制的,
# Redis可以同时打开客户端连接数为Redis进程可以
# 打开的最大文件描述符数,如果设置为0,表示不作限制。
# 当客户端连接数到达最大限制时,Redis会关闭新的连接
# 并返回客户端max number of clients reached错误信息;
timeout 300
# 设置客户端与Redis实例连接的超时时间
# 单位是秒,默认是0,表示禁用(不管它)
tcp-backlog 511
tcp-keepalive 60
## Redis Memory parameter【内存相关参数】
maxmemory 1GB
# 给Redis实例分配的最大物理内存,默认是没有分配的;相当于设置为0;
# 在指定内存大小时可用的单位有:k/Kb,m/Mb,g/Gb;是不分大小写的哈;
# 当Redis服务启动后,会立即数据加载到内存中,当达该参数设置的最大
# 内存后,redis会尝试清除已到期或即将到期的key,当用此方法处理后,
# 仍然达到最大内存设置,将无法再进行写入操作,但仍可以进行读取操作;
maxmemory-policy noeviction
# 当分配的内存不中时,如何淘汰内存中的数据,有5种策略
# noeviction <== 默认值,不让任何key过期,只是给写入操作返回一个错误;要用它,前提是开发为key设置了过期时间
## RDB PERSISTENCE【RDB持久化相关参数】都是可以在线进行修改的
"# RDB持久化的相关总结请看 博文的 2.5 章节"
save 900 1 # 在900秒内有1个key值被改动,则自动保存一次数据集;
save 300 10 # 在300秒内有10个key值被改动,则自动保存一次数据集;
save 60 10000 # 在60秒内有10000个key值被改动,则自动保存一次数据集;
# redis默认是没有开启RDB持久化的,即你的redis配置文件中没有save参数,启动后且没有设置save,那么rdb默认是没有开启的
dbfilename dump.rdb
# 不管RDB持久化有没有开启,该参数的默认值都是dump.rdb;建议用默认值;
# 表示RDB持久化数据是以什么名称的文件来体现,保存到dir参数所指定的目录下;
# 为什么说不管RDB持久化有没有开启,默认的值都是dump.rdb,因为若rdb持久没有开启,我是可以手动执行bgsave或者save来进行持久化的
rdbcompression yes
# 不管RDB持久化有没有开启,该参数的默认值yes,建议用默认值;
# 表示在进行RDB持久化时,使用LZF压缩字符串对象,这样RDB持久化的文件比实践数据要小;
# 为什么说不管RDB持久化有没有开启,默认的值都是yes,因为若rdb持久没有开启,我是可以手动执行bgsave或者save来进行持久化的
rdbchecksum yes
# 不管RDB持久化有没有开启,该参数的默认值yes,建议用默认值;
# 对RDB文件进行校验,对性能有10%的下降;
# 为什么说不管RDB持久化有没有开启,默认的值都是yes,因为若rdb持久没有开启,我是可以手动执行bgsave或者save来进行持久化的
stop-writes-on-bgsave-error no
# 不管RDB持久化有没有开启,该参数的默认值yes,建议修改成no;
# 首先要知道,redis在自动持久化数据时是使用bgsave命令for出一个后线程,
# 要持久化时若发生错误,此时redis的主进程可以继续响应客户端的操作;反之
# 但要是保存数据出错了呢,例如:磁盘损坏,磁盘满了,权限的问题;
# yes 默认是yes,表示不再响应客户端的写操作;
# no 表示继续响应客户端的写操作;
# 为什么说不管RDB持久化有没有开启,默认的值都是yes,因为若rdb持久没有开启,我是可以手动执行bgsave或者save来进
# 行持久化的
"# 它是可以在线进行更改的哈"
## AOF PERSISTENCE【AOF持久化相关参数】 都是可以在线进行修改的
# AOF持久化的相关总结请看 博文的 3.5 章节
appendonly no
# 是否打开aof持久化,默认是no,若想打开,设置成yes就好,当然你也得在redis的配置文件中添加这个配置
appendfsync everysec
# 设置AOF持久数据到磁盘的间隔,默认是everysec,AOF持久化开启后才生效;
# everysec # fsync每秒只进行一次。妥协。
# always # fsync在每次写入append only日志后执行。缓慢的,安全的。
# no # 不要fsync,让操作系统在需要的时候刷新数据。得更快。
appendfilename "appendonly.aof"
# 设置AOF持久化的文件名称,默认是appendonly.aof,AOF持久化开启后才生效;
no-appendfsync-on-rewrite no
# 在理解此参数前先理解以下两点:
# A:当AOF持久化被设置成everysec(每秒)或always(总是)时,大并发写操作的
# 情况下会造成大量的磁盘负载(IO);fsync调用会阻塞;
# B: 还有就大数据集的情况下你手动执行了BGREWRITEAOF命令让其for出一个后
# 台子进程进行重写,也会造成大量的磁盘负载(IO);fsync调用会阻塞;
# 参数no-appendfsync-on-rewrite的意思就是当磁盘有延迟(fsync调用阻塞)的
# 时候不开启aof的重写功能:
# no表示不同意(我才不管磁盘受不受得了,这时程序端的写操作可能就会被阻塞)
# yes表示同意(我不急,等磁盘不忙时再重写)
auto-aof-rewrite-min-size 64mb
# 当aof持久化的数据文件达到该参数设置的值时(默认64mb),redis自动进行使用
# bgrewriteaof命令触发AOF的重写功能,触发后是由一个后台子进程来完成,在进
# 行重写的时候会占用服务器的内存;什么是AOF的重写功能呢?以下通过来手动触
# 发AOF持久化的重写来举例来说明:
# A:你添加数据(set key01 "chenliang")后,该数据被持久化到文件中(磁盘上);
# B:此时你在key01对应值后面追加了数据lili(append key01 "lili"),该数据
# 也被持久化AOF数据文件中,此时AOF文件中有两条命令;
# C:这时手动触发重写后,AOF文件中就只有1条数据了(set key01 "chenlianglili");
auto-aof-rewrite-percentage 100
# 也就是继redis第一次自动触发AOF重写功能后以什么标准来触发第二次的重写,以此
# 类推哈。以下通过举例说明:
# A:当AOF文件大小达到auto-aof-rewrite-min-size参数设置大小时(64mb)时,redis自
# 动进行重写,重写完成后,AOF持久化的数据文件的大小是60Mb;
# B:redis第二次自动触发重写功能就得数据文件大小达到120Mb;
aof-load-truncated yes
# 指redis在恢复或加载AOF持久化的数据时,遇到可能存在问题的指令时,是否继续;
# yes表示继续恢复或加载,等同于"发现现错误时继续执行后面的数据;" 默认值
# no 表示遇到错误就停止,等于同"遇到错误退出,不再执行后面的数据"
## REPLICATION【主从复制相关参数】
repl-diskless-sync no
# 该参数的意思是:使用无磁盘复制,这个还在实验阶段(6.0版本之前不建议开启),建议使用默认值;
# no # 默认值,表示不同意,也就是不启动无盘复制;生产中设置成no;
# yes # 表示同意,也就是开启无盘复制(实验验证,不要开启)
"# PS:让其默认就好,不要另外设置值"
slaveof 172.16.1.21 6379
# 指定Master端的IP地址为172.16.1.21,端口为6379
# 当slaveof的值生效后,redis的角色会成为slave,但不一定会正常同步数据,因为master端可能还需要认证;
# 当配置文件中有这个参数时,在启动redis实例时就会去找Master进行连接;
# 如果配置文件中没这个参数时,在启动redis实例时它不会去找master,它就是独立的,角色为master;
# 当然我们也可以在线进行设置,设置了以后不要忘了写入配置文件(手动修改配置文件 或者 在线执行config rewrite命令)
"# PS:这是参数默认值是空,是在要成为slave角色的redis实例上进行设置的;"
masterauth "chenliang"
# 让slave知道master端的连接密码是chenliang,前提是master端的requirepass参数的值是chenliang,以在线结果为准;
# 在要成为slave角色的redis实例的配置文件中就这样配置 masterauth "chenliang"
# 如果认证成功,则master与slave就会进行数据同步了(原理这里不说);
# 若在线设置,例如:config set masterauth "chenliang" 但不要忘了写入配置文件(执行config rewrite)
"# PS:这个参数默认值为空,是在要成为slave角色的redis实例上进行设置的;"
repl-disable-tcp-nodelay no
# 参数的意思是:在复制时禁止tcp的延迟
# no 默认值,表示不同意,这样就master端一但有数据产生,立即发送给slave,不会造成主从数据的延迟;
# yes 表示同意,这样master端一有数据产生,不会马上发送发给slave,会造成主从数据的延迟;
"# PS:这个参数默认值就是no,不管当前redis实例是master还是slave;因为slave可以在外力干预下成为new master;"
slave-read-only yes
# 设置slave为只读,默认等于yes;虽然默认是yes,若slaveof参数
# 没有指定,它也是不生效的;从2.6版本开始,默认就是只读的哈;
"# PS:这个参数的默认值是yes,表示只读,不管当前redis实例是master还是slave;因为master可以在外力干预下成为new master的slave;"
repl-ping-slave-period 10
# 设置slave每隔多长时间检查(ping)一下Master是否还存活着的;单位是秒,默认也是10秒;
# 如果master宕机了,slave也检测到了,在没有外力干预的情况下,slave不会成为new master的哈;
"# PS:这个参数默认值就是10,不管当前redis实例是master还是slave;因为master可以在外力干预下成为new master的slave;"
slave-serve-stale-data yes
# 当slave与master端失去连接时或正在同步数据,此时客户端连接
# 到slave,slave以什么方式回应客户端的操作;
# yes <==仍然影响,可能数据不是最新的(数据还没同步完;已经与master断开了,无法同步到数据)
# no <==对所有类型的命令报"SYNC with master in progress(正在与主进行同步)"错误;
"# PS:这个参数的默认值是yes,不管当前redis实例是master还是slave,因为master可以在外力干预下成为new master的slave;"
slave-priority 100
# 提升slave为new master的权重,这个在sentinel+replication架构用得着(看自己的规划,要进行另外的设置了,不要默认了);
# 数值越小,提升为new master的机率就越高.
"# PS:这个参数的默认值是100,不管当前redis实例是master还是slave,因为master可以在外力干预下成为new master的slave"
repl-timeout 60
# 设置复制的超时时间,这单位是秒,默认是60,这个参数该参数的值不能大于Master端的timeout设置的时间
# 大数据集比较大时,建议调大该参数的值,因为在全量同步时可能会很久;
"# PS:这个参数的默认值是60,也就是60秒,不管当前redis实例是master还是slave;因为slave可以在外力干预下成为new master;"
repl-backlog-size 1mb
repl-backlog-ttl 3600
min-slaves-to-write 0
# 该参数的值,默认为0,表示即使所有slave下线了,master还继续接受客户端的写操作;
# 假如设置该参数的值是2,即表示,至少要有两个slave存活,如果达不到要求,则master停止接受写操作;
# 我生产让其保持默认值;
"# 该参数不管redis实例是master还是slave,默认都为0,因为slave可以在外力干预下成为new master"
min-slaves-max-lag 10
"# 当min-slaves-to-write等于0时,该参数的默认值无效的;该参数的默认值为10;"
# 当min-slaves-to-write不等于0时,该参数的默认值有效,它的意思如下所示:
# min-slaves-to-write 2 <== 至少要有两个slave存活,master才不会拒绝客户端的写操作,我有两个slave存活
# min-slaves-max-lag 10 <== 表示当存活的两个slave与master延迟大于等于10秒时,master还是拒绝客户端的写操作;
slave-announce-ip 5.5.5.5
# 该参数的默认值是没有的哈,不管redis角色是master还是slave;
#
slave-announce-port 1234
# 该参数的默认值是没有的哈,不管redis角色是master还是slave;