文章目录

  • 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;