zoukankan      html  css  js  c++  java
  • redis配置文件详情

    7、配置文件详解

    #监听地址,可以指定多个,用逗号隔开
    bind 127.0.0.1

    #redis3.2之后加入的新特性在没有设置 bind IP和密码的时候只允许访问127.0.0.1 :6379
    protected-mode yes

    #默认监听端口6379
    port 6379

    #此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p
    tcp-backlog 511

    #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时。
    timeout 0

    #tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值
    tcp-keepalive 300

    #yes后台运行、no前台运行
    daemonize yes

    #
    supervised no

    #pid文件路径
    pidfile /app/redis/pid/redis_6379.pid

    #指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)
    loglevel notice

    #日志文件路径
    logfile "/app/redis/logs/redis-6379.log"

    #设置db库数量,默认16个库
    databases 16

    #always-show-logo yes # 在启动 redis 时是否 显示 log
    always-show-logo yes
    # 在900 秒内有一个键内容发生更改触发快照机制
    save 900 1
    #在300 秒内有10个键内容发生更改触发快照机制
    save 300 10
    #在60 秒内有10000个键内容发生更改触发快照机制
    save 60 10000


    #当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
    stop-writes-on-bgsave-error yes

    #配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。
    rdbcompression yes

    #是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
    rdbchecksum yes

    #指定本地数据库文件名,一般采用默认的 dump.rdb
    dbfilename dump-6379.rdb

    #数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
    dir /app/redis/data

    #做从库的时候指定主库的ip port
    slaveof 192.168.47.188 6379
    #做从库的时候指定主库的连接密码
    masterauth 123456

    #设置 redis 连接登录密码,配置了redis,必须设置密码,防止被入侵之后被黑客搞破坏。
    #例如 requirepass 123456
    requirepass foobared  

    #是否开启集群模式,默认是单机模式
    cluster-enabled yes

    #当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何请求都会返回一个错误”SYNC with master in progress”。
    replica-serve-stale-data yes

    #作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)
    replica-read-only yes

    # 是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式
    repl-diskless-sync no

    #diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来
    repl-diskless-sync-delay 5

    #是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no,即使用tcp nodelay。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带
    repl-disable-tcp-nodelay no


    # 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举
    replica-priority 100

    #以非阻塞方式释放内存
    #使用以下配置指令调用了
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    replica-lazy-flush no

    #
    #Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。若开启rdb则将no改为yes
    appendonly yes
    #指定本地数据库文件名,默认值为 appendonly.aof
    appendfilename "appendonly.aof"


    #aof持久化策略的配置
    #no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
    #always表示每次写入都执行fsync,以保证数据同步到磁盘
    #everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
    appendfsync everysec

    # 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据
    no-appendfsync-on-rewrite no (推荐为yes)

    #当 Aof log增长超过指定百分比例时,重写 logfile设置为0表示不自动重写 Aof 日志,重写是为了使 aof 体积保持最小,而确保保存最完整的数据。
    auto-aof-rewrite-percentage 100
    #触发aof rewrite 的最小文件大小
    auto-aof-rewrite-min-size 64mb

    #aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以
    aof-load-truncated yes
    #redis4.0 新增 RDB AOF 混合持久化格式,在开启了这个功能之后, AOF 重写产生的文件将同时包含 RDB 格式的内容和 AOF 格式的内容,其中 RDB 格式的内容用于记录已有的数据,而 AOF 格式的内存则用于记录最近发生了变化的数据,这样 Redis 就可以同时兼有 RDB 持久化和AOF 持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。
    aof-use-rdb-preamble yes

    #lua 脚本 的 最大 执行时间单位为毫秒
    lua-time-limit 5000

    #执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
    slowlog-log-slower-than 10000
    #慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存
    slowlog-max-len 128
    #延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。只记录大于等于下边设置的值的操作。0的话,就是关闭监视。默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置
    latency-monitor-threshold 0

    #键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
    #notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:
    ##K 键空间通知,所有通知以 __keyspace@__ 为前缀
    ##E 键事件通知,所有通知以 __keyevent@__ 为前缀
    ##g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
    ##$ 字符串命令的通知
    ##l 列表命令的通知
    ##s 集合命令的通知
    ##h 哈希命令的通知
    ##z 有序集合命令的通知
    ##x 过期事件:每当有过期键被删除时发送
    ##e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
    ##A 参数 g$lshzxe 的别名
    #输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。详细使用可以参考http://redis.io/topics/notifications
    notify-keyspace-events ""

    # 数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash
    hash-max-ziplist-entries 512
    # value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash
    hash-max-ziplist-value 64
    #-5:最大大小:64 KB<--不建议用于正常工作负载
    #-4:最大大小:32 KB<--不推荐
    #-3:最大大小:16 KB<--可能不推荐
    #-2:最大大小:8kb<--良好
    #-1:最大大小:4kb<--良好
    list-max-ziplist-size -2

    #0:禁用所有列表压缩
    #1:深度1表示“在列表中的1个节点之后才开始压缩,
    #从头部或尾部
    #所以:【head】->node->node->…->node->【tail】
    #[头部],[尾部]将始终未压缩;内部节点将压缩。
    #2:[头部]->[下一步]->节点->节点->…->节点->[上一步]->[尾部]
    #2这里的意思是:不要压缩头部或头部->下一个或尾部->上一个或尾部,
    #但是压缩它们之间的所有节点。
    #3:[头部]->[下一步]->[下一步]->节点->节点->…->节点->[上一步]->[上一步]->[尾部]
    list-compress-depth 0

    # 数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set
    set-max-intset-entries 512
    #数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
    zset-max-ziplist-entries 128
    #数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
    zset-max-ziplist-value 64
    ##value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
    hll-sparse-max-bytes 3000
    #宏观节点的最大流/项目的大小。在流数据结构是一个基数
    #树节点编码在这项大的多。利用这个配置它是如何可能#大节点配置是单字节和
    #最大项目数,这可能包含了在切换到新节点的时候
    # appending新的流条目。如果任何以下设置来设置
    # ignored极限是零,例如,操作系统,它有可能只是一集
    #通过设置限制最大#纪录到最大字节0和最大输入到所需的值
    stream-node-max-bytes 4096
    stream-node-max-entries 100

    ##Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内
    activerehashing yes


    ##对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的
    client-output-buffer-limit normal 0 0 0

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

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

    #redis执行任务的频率为1s除以hz
    hz 10


    #当启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数
    #在连接更多客户端后根据需要使用。这样一个闲置的实例将占用很少的CPU时间,而繁忙的实例将反应更灵敏
    dynamic-hz yes


    #在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
    aof-rewrite-incremental-fsync yes

    #在rdb保存的时候,如果打开了rdb-save-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
    rdb-save-incremental-fsync yes

     参考:https://blog.csdn.net/suprezheng/article/details/90679790

  • 相关阅读:
    Windows10使用VMware安装centos
    Windows10安装VMware
    DotNetCore2.1使用GitLab通过阿里云自动构建镜像上传阿里云仓库在Docker运行
    DotNetCore2.1镜像上传DockerHub在Docker运行
    Linux编辑器
    Linux环境使用Docker安装GitLab
    Linux环境使用Docker安装SqlServer2017
    使用Pycharm创建一个Django项目
    C# 5.0五大新特性
    C#6.0中10大新特性的应用和总结
  • 原文地址:https://www.cnblogs.com/hsyw/p/13258587.html
Copyright © 2011-2022 走看看