Redis实战-Redis配置(三)

作者: 擦普洱 | 来源:发表于2019-04-09 14:05 被阅读45次

    在学习Redis配置之前我们首先打开Redis客户端,然后输入命令:

    config get *
    

    获取当前redis配置的所有信息,如下图所示:

    127.0.0.1:6379> config get *
      1) "dbfilename"
      2) "dump.rdb"
      3) "requirepass"
      4) "test"
      5) "masterauth"
      6) ""
      7) "unixsocket"
      8) ""
      9) "logfile"
     10) ""
     11) "pidfile"
     12) "/var/run/redis.pid"
     13) "maxmemory"
     14) "0"
     15) "maxmemory-samples"
     16) "5"
     17) "timeout"
     18) "0"
     19) "tcp-keepalive"
     20) "0"
     21) "auto-aof-rewrite-percentage"
     22) "100"
     23) "auto-aof-rewrite-min-size"
     24) "67108864"
     25) "hash-max-ziplist-entries"
     26) "512"
     27) "hash-max-ziplist-value"
     28) "64"
     29) "list-max-ziplist-entries"
     30) "512"
     31) "list-max-ziplist-value"
     32) "64"
     33) "set-max-intset-entries"
     34) "512"
     35) "zset-max-ziplist-entries"
     36) "128"
     37) "zset-max-ziplist-value"
     38) "64"
     39) "hll-sparse-max-bytes"
     40) "3000"
     41) "lua-time-limit"
     42) "5000"
     43) "slowlog-log-slower-than"
     44) "10000"
     45) "latency-monitor-threshold"
     46) "0"
     47) "slowlog-max-len"
     48) "128"
     49) "port"
     50) "6379"
     51) "tcp-backlog"
     52) "511"
     53) "databases"
     54) "16"
     55) "repl-ping-slave-period"
     56) "10"
     57) "repl-timeout"
     58) "60"
     59) "repl-backlog-size"
     60) "1048576"
     61) "repl-backlog-ttl"
     62) "3600"
     63) "maxclients"
     64) "10000"
     65) "watchdog-period"
     66) "0"
     67) "slave-priority"
     68) "100"
     69) "min-slaves-to-write"
     70) "0"
     71) "min-slaves-max-lag"
     72) "10"
     73) "hz"
     74) "10"
     75) "cluster-node-timeout"
     76) "15000"
     77) "cluster-migration-barrier"
     78) "1"
     79) "cluster-slave-validity-factor"
     80) "10"
     81) "repl-diskless-sync-delay"
     82) "5"
     83) "cluster-require-full-coverage"
     84) "yes"
     85) "no-appendfsync-on-rewrite"
     86) "no"
     87) "slave-serve-stale-data"
     88) "yes"
     89) "slave-read-only"
     90) "yes"
     91) "stop-writes-on-bgsave-error"
     92) "yes"
     93) "daemonize"
     94) "yes"
     95) "rdbcompression"
     96) "yes"
     97) "rdbchecksum"
     98) "yes"
     99) "activerehashing"
    100) "yes"
    101) "repl-disable-tcp-nodelay"
    102) "no"
    103) "repl-diskless-sync"
    104) "no"
    105) "aof-rewrite-incremental-fsync"
    106) "yes"
    107) "aof-load-truncated"
    108) "yes"
    109) "appendonly"
    110) "no"
    111) "dir"
    112) "G:\\developTool\\Redis"
    113) "maxmemory-policy"
    114) "noeviction"
    115) "appendfsync"
    116) "everysec"
    117) "save"
    118) "jd 900 jd 300 jd 60"
    119) "loglevel"
    120) "notice"
    121) "client-output-buffer-limit"
    122) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
    123) "unixsocketperm"
    124) "0"
    125) "slaveof"
    126) ""
    127) "notify-keyspace-events"
    128) ""
    129) "bind"
    130) ""
    127.0.0.1:6379>
    

    上述即为Redis的所有配置信息,乍一看杂乱无章,其实我们可以打开Redis安装路径下的redis.windows.conf进行学习,Redis的配置大致可以分为一下几类:

    • 引入-1(includes)
    • 通用-12 (general)
    • 快照-6 (snapshotting)
    • 复制-14 (replication)
    • 安全-1 (security)
    • 限制-3 (limits)
    • 追加模式-5(append only mode)
    • LUA脚本-1(lua scripting)
    • Redis 集群-6 (redis cluster)
    • 慢日志-2(slow log)
    • 延迟监控-1(latency monitor)
    • 事件通知-1(event notification)
    • 高级配置-15(advanced config)

    引入

    可以将公共的配置放入到一个公共的配置文件中,然后通过子配置文件引入父配置

    #下面的命令表示引入配置文件
     include /path/to/local.conf
     include /path/to/other.conf
    

    举例说明:
    当前我的redis安装目录下有一个redis.config,现在将这个配置文件复制一份出去:

    [hand@localhost redis-2.8.17]$ cp redis.conf /home/hand/opt/redis-include.conf
    #然后修改redis-include.conf中的守护进程daemonize 为yes
    [hand@localhost opt]$ vi redis-include.conf
    daemonize yes
    #然后将原始的redis.conf中的daemonize no注释掉,同时引入redis-include.conf
    [hand@localhost redis-2.8.17]$ vi redis.conf
    #daemonize no
    include /home/hand/opt/redis-include.conf
    #保存之后,启动redis服务,同时指定配置文件redis.conf
    ./redis-server ../redis.conf
    #然后开一个窗口打开redis客户端,获取daemonize信息
    ./redis-cli
    127.0.0.1:6379> config get daemonize
    1) "daemonize"
    2) "yes"
    127.0.0.1:6379> 
    
    

    发现daemonize的属性值已经被修改过了,说明咱们在redis.conf 中引入的redis-include.conf生效了。
    注意:一般引入的文件在配置文件的最顶部,因此如果想让自己引入的配置文件【redis-include.conf】中的属性生效,要么在父文件【redis.conf】中不出现子文件中已经修改的配置信息或者注释掉。要么就放在父配置文件的最底部。否则的话子文件中修改了的属性值,在启动的过程中又会被父文件中的值覆盖掉。--这个很关键

    通用

    1.daemonize:如果值是“yes”,则启动服务的时候是后台守护进程形式,如果值是“no”,则相反

    daemonize yes
    

    2.port:指定端口

    port 6379
    

    3.tcp-backlog:此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度,当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。一般取的是min(backlog,somaxconn)中较小的值,因此在高并发的场景下可以将somaxconn在配置文件中改大一些。

    tcp-backlog 511
    

    4.bind:绑定主机地址

    # bind 192.168.1.100 10.0.0.1
    # bind 127.0.0.1
    

    5.unixsocket 支持不监听端口,也能与外界进行通信,可以通过unixsocket配置项来指定unix socket文件的路径,并通过unixsocketperm来指定文件的权限。

    unixsocket /tmp/redis.sock
    unixsocketperm 700**
    

    6.timeout 表示客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

    timeout 0
    

    7.tcp-keepalive tcp心跳检测,指定的值(以秒为单位)是用于发送ack的周期,用来检测在特定时长的时间内客户端是否存在响应,如果无响应则关闭当前连接,注意:要关闭连接,一般需要双倍的时间。如果值为0,则表示不会进行检测

    tcp-keepalive 0
    

    8.loglevel:Redis总共支持四个级别:debug、verbose、notice、warning。

    Debug:记录很多信息,用于开发和测试;

    Varbose:有用的信息,不像debug会记录那么多;

    Notice:普通的verbose,常用于生产环境;

    Warning:只有非常重要或者严重的信息会记录到日志;

    默认是notice级别。
    9.logfile 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout
    

    在windows的配置文件中我们可以看到默认的配置为:

    logfile ""
    

    我们可以手动更改日志的输出文件为:

    logfile "G:/developTool/Redis/log/redis.log"
    

    10.syslog-enabled:要启用日志记录到Windows EventLog,只需将'syslog-enabled'设置为yes,并可选择更新其他syslog参数以满足您的需求。如果Redis已安装并作为Windows服务启动,则会执行此操作自动启用。这个时候当我们启动redis-server.exe的时候不会看到日志了,所有的日志都会记录到上述的redis.log文件中。

    syslog-enabled yes
    

    11.syslog-ident:在Windows应用程序日志中指定事件的源名称。

    syslog-ident redis
    

    12.databases:设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

    databases 16
    

    快照

    1.save:指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合,比如save 300 10表示:300秒内至少有300个key被改变时,触发保存信息到磁盘的事件。

    save 900 1
    save 300 10
    save 60 10000
    

    2.stop-writes-on-bgsave-error:当持久化出现错误之后,是否继续提供写服务rdbcompression :指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

    stop-writes-on-bgsave-error yes
    

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

    rdbcompression yes
    

    4.dbfilename 指定本地数据库文件名,默认值为dump.rdb

     dbfilename dump.rdb
    

    5.rdbchecksum:读取和写入的时候是否支持CRC64校验,默认是开启的
    读取和写入的时候是否支持CRC64校验,默认是开启的

    rdbchecksum yes
    

    6.dir:指定本地数据库存放目录

    dir ./
    

    复制

    1.slaveof:设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    slaveof <masterip> <masterport>
    如上命令所示,我们可以获取master中主服务的数据,配置为
    slaveof 192.168.1.196 6379
    

    2.masterauth 当master服务设置了密码保护时,slav服务连接master的密码

     masterauth <master-password>
    

    3.slave-serve-stale-data:当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”

    slave-serve-stale-data yes
    

    4.slave-read-only:是否允许slave服务器节点只提供读服务

    slave-read-only yes
    

    5.repl-diskless-sync:
    官方解释:复制同步策略:硬盘或者套接字,当前的硬盘复制处于一个实验阶段,新的slave和重新连接无法复制的slave,进程只是接收差异需要做一个完全的同步,RDB文件从主服务器传输到从服务器。传输可以通过两种不同的方式进行:

    • 磁盘支持:Redis主服务器创建一个新进程用来写RDB文件到
      磁盘上。稍后该文件由父进程传输逐步增加子进程。
    • 无盘:Redis主机创建一个直接写入的新进程RDB文件到从套接字,根本没有触及磁盘。

    *使用磁盘支持的复制,在生成RDB文件时,会有更多的slave服务器
    可以在当前进程生成后立即对RDB文件进行排队并提供RDB文件完成其工作。 使用无盘复制而不是一次转移开始,新的进程到达将排队和新的转移,将在当前终止时启动。

    *使用无盘复制时,主机等待可配置的数量希望多个紫禁城开始转移之前的时间(以秒为单位)将到达并且转移可以并行化。

    使用慢速磁盘和快速(大带宽)网络,无盘复制效果会更好。

    #表示不开启磁盘复制
    repl-diskless-sync no  
    

    6.repl-diskless-sync-delay:启用无磁盘复制后,可以配置延迟
    用来服务器等待其他slave服务器以产生通过套接字传递RDB的子节点。
    这很重要,因为一旦转移开始,就无法提供服务,新的slave服务器到达,将排队等待下一次RDB转移,所以服务器等待延迟,以便让更多的slave服务器到达。
    延迟以秒为单位指定,默认为5秒。 要禁用它只要设置为0秒,传输将尽快开始。

    repl-diskless-sync-delay 5
    

    7.repl-ping-slave-period: slave服务器使用预定义的时间向主服务器发送请求连接,这个值是可以配置的,默认为10秒。

    repl-ping-slave-period 10
    

    8.repl-timeout: 设置复制超时时间,

    repl-timeout 60
    

    9.repl-disable-tcp-nodelay:指定向slave同步数据时,是否禁用socket的NO_DELAY选 项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。

    repl-disable-tcp-nodelay no
    

    10.repl-backlog-size :设置slave服务器复制时候积压的缓冲区,当从服务器在某一时间断开连接,重新连接的时候,只需要部分同步即可,只要传递同步丢失的部分数据,注意了,至少有一个slave服务器才会设置挤压内存。

    repl-backlog-size 1mb
    

    11.repl-backlog-ttl: 当master服务器与slave服务器断开的一段时间内释放待办事项缓冲区,单位为秒,当值为0的时候,表示不会释放积压。

    repl-backlog-ttl  3600
    

    12.slave-priority:指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。

    slave-priority 100
    

    13.min-slaves-to-write 3 表示当slave服务器有3个连接不上的时候,master服务器将会拒绝之后的连接,当值为0的时候为禁用该功能。
    14.min-slaves-max-lag 10 表示连接master服务器的超时时间为10秒。

    安全

    1.requirepass 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭,上述所示我们的redis密码显示为空。

    PS:如果我们想修改redis的密码,有两种方式:

    ①修改配置文件的requiress参数,该修改方法需要重启redis服务

    • 查看当前密码:
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) ""
    127.0.0.1:6379>
    
    • 修改配置文件requirepass password ,注意我的redis配置文件是 redis.windows.config这个在上一节中配置redis为服务的时候提及过。【注意修改的时候注释和命令行都必须顶格,否则会报错】

    • 重启服务后查询密码:

    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "password"
    127.0.0.1:6379>
    

    ②在客户端的命令行中修改,该方法修改是暂时的,当redis服务重启的时候密码无效

    • 修改密码为test,然后查询,发现密码已经修改成功了。
    127.0.0.1:6379> config set requirepass test
    OK
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "test"
    127.0.0.1:6379>
    

    限制

    1.maxclients:设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,
    如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxclients 10000
    

    2.maxmemory 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。

    maxmemory <bytes>
    

    3.maxmemory-samples 指的是每次进行淘汰的时候 会随机抽取5个key 从里面淘汰最不经常使用的(默认选项)

    maxmemory-samples 5
    

    追加模式

    1.appendonly:指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no
    

    2.appendfilename:指定更新日志文件名,默认为appendonly.aof

    appendfilename "appendonly.aof"
    

    3.appendfsync:指定更新日志条件,共有3个可选值:
    no:表示等操作系统进行数据缓存同步到磁盘(快)
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    everysec:表示每秒同步一次(折中,默认值)

    appendfsync always
    appendfsync everysec
    appendfsync no
    

    4.no-appendfsync-on-rewrite:指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。

    no-appendfsync-on-rewrite no
    

    5.auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size
    rewrite机制,aof存放了所有redis的操作指令,当aof文件达到auto_aof_rewrite_base_size基准值的时候,就会自动出发rewrite,
    auto-aof-rewrite-percentage 100 表示:当前写入日志文件的大小超过上一次rewrite之后的文件大小的百分之100时就是2倍时触发rewrite,
    rewrite之后aof文件会保存keys的最后的状态,清除掉之前冗余的,来缩小这个文件,把它设置为0可以禁用自动触发的功能。

    #当前写入为上次文件大小的100%时触发
    auto-aof-rewrite-percentage 100 
    #当值为0的时候,表示禁用自动触发该功能
    auto-aof-rewrite-percentage 0
    

    auto_aofrewrite_min_size: 当前aof文件大于多少字节后才触发。避免在aof很小的时候就触发了。默认大小为64mb。

    LUA脚本

    1.lua-time-limit:一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000

    lua-time-limit 5000
    

    Redis集群

    1.cluster-enabled:是否启用集群功能,如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例

    cluster-enabled yes
    

    2.cluster-config-file :集群配置文件,此配置文件不能人为的手动维护,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。

    cluster-config-file nodes-6379.conf
    

    3.cluster-node-timeout:表示集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不能连接,则用它的其他节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求,单位是毫秒。

    #默认为15秒
    cluster-node-timeout 15000
    

    4.cluster-slave-validity-factor:如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。

    cluster-slave-validity-factor 10
    

    5.cluster-migration-barrier:主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。

    cluster-migration-barrier 1
    

    6.cluster-require-full-coverage:在部分key所在的节点不可用时,如果此参数设置为"yes"(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。

    cluster-require-full-coverage yes
    

    慢日志

    Slow log 是 Redis 用来记录查询执行时间的日志系统。查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。
    慢日志包括两个属性:一个是slowlog-log-slower-than:它表示决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。另一个是slowlog-max-len:它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。

    #表示慢日志会记录查询时间大于10000微秒的查询
    slowlog-log-slower-than 10000
    #表示慢日志能记录的最大条数为128
    slowlog-max-len 128
    

    另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

    延迟监控

    latency-monitor-threshold:这个参数项用来设置操作时间的阀值,如果关闭延迟监控功能的话,可以将这个值设置为0。

    latency-monitor-threshold 0
    

    LATENCY监控器功能,是从Redis Version 2.8.3开始提供的一个重要的反映其延迟状态的监控功能。其工作任务是当技术人员设置了一个延迟操作的时间阀值后,凡是超过了这个阀值时间的操作都将被认为是执行缓慢的操作被记录下来。Redis客户端在登录后,可以使用诸如LATENCY LATEST、LATENCY HISTORY、LATENCY RESET、LATENCY GRAPH、LATENCY DOCTOR等命令控制/查询LATENCY监控器。
    下面就用LATENCY的各种子命令来查看延迟记录:

    LATENCY LATEST命令报告记录的最新延迟事件。 每个活动都有以下字段:

    • 活动名称。
    • 事件的最新延迟峰值的Unix时间戳。
    • 最新事件延迟(毫秒)。
    • 此事件的所有时间最长延迟。
      1.LATENCY LATEST 最新延迟显示
    127.0.0.1:6379> debug sleep 1
    OK
    (1.00s)
    127.0.0.1:6379> debug sleep .25
    OK
    127.0.0.1:6379> latency latest
    (empty list or set)
    127.0.0.1:6379> config set latency-monitor-threshold 100
    OK
    127.0.0.1:6379> debug sleep 1
    OK
    (1.00s)
    127.0.0.1:6379> debug sleep .25
    OK
    127.0.0.1:6379> latency latest
    1) 1) "command"
       2) (integer) 1555912857
       3) (integer) 250
       4) (integer) 1000
    127.0.0.1:6379>
    
    

    2.LATENCY HISTORY:历史延迟显示

    127.0.0.1:6379> latency history command
    1) 1) (integer) 1555912853
       2) (integer) 1000
    2) 1) (integer) 1555912857
       2) (integer) 250
    

    3.LATENCY RESET:清除延迟记录
    如果不带参数调用,LATENCY RESET命令将重置所有事件,丢弃当前记录的延迟峰值事件,并重置最大事件时间寄存器。
    通过提供事件名称作为参数,可以仅重置特定事件。 该命令返回在命令执行期间重置的事件时间序列的数量。

    127.0.0.1:6379> latency reset command
    (integer) 1
    127.0.0.1:6379>
    

    4.LATENCY GRAPH:延迟图,以图形化的方式显示。最下面以竖行显示的是指延迟在多久以前发生。

    127.0.0.1:6379> debug sleep .1
    OK
    127.0.0.1:6379> debug sleep .2
    OK
    127.0.0.1:6379> debug sleep .3
    OK
    127.0.0.1:6379> debug sleep .4
    OK
    127.0.0.1:6379> debug sleep .5
    OK
    (0.50s)
    127.0.0.1:6379> latency graph command
    command - high 500 ms, low 100 ms (all time high 500 ms)
    --------------------------------------------------------------------------------
       _#
      _||
     _|||
    _||||
    
    15554
    m8624
     ssss
    127.0.0.1:6379>
    

    事件通知

    1.keyspace notification:键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。这一块可以参考:http://redisdoc.com/topic/notification.html
    对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件。
    比如说,对 0 号数据库的键 foo 执行命令时, 系统将分发两条消息, 相当于执行以下两个命令:

     PUBLISH __keyspace@0__:foo del
     PUBLISH __keyevent@0__:del foo
    

    订阅第一个频道 __keyspace@0__:foo 可以接收 0 号数据库中所有修改键 foo 的事件, 而订阅第二个频道 __keyevent@0__:del 则可以接收 0 号数据库中所有执行 del 命令的键。

    keyspace 为前缀的频道被称为键空间通知(key-space notification), 而以 keyevent 为前缀的频道则被称为键事件通知(key-event notification)。

    del mykey 命令执行时:

    • 键空间频道的订阅者将接收到被执行的事件的名字,在这个例子中,就是 del
    • 键事件频道的订阅者将接收到被执行事件的键的名字,在这个例子中,就是 mykey
      2.notify-keyspace-events :
    • 当 notify-keyspace-events 选项的参数为空字符串时,功能关闭。
    • 另一方面,当参数不是空字符串时,功能开启。
      notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:
    字符 发送的通知
    K 键空间通知,所有通知以 keyspace@<db> 为前缀
    E 键事件通知,所有通知以 keyevent@<db> 为前缀
    g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
    $ 字符串命令的通知
    l 列表命令的通知
    s 集合命令的通知
    h 哈希命令的通知
    z 有序集合命令的通知
    x 过期事件:每当有过期键被删除时发送
    e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
    A 参数 g$lshzxe 的别名

    默认值

    notify-keyspace-events ""
    #当值为Ex的时候表示开启键事件通知,每当有过期键被删除时发送
    notify-keyspace-events Ex
    

    高级配置

    1.指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    
    1. 指定是否激活重置哈希,默认为开启
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    

    3.hll-sparse-max-bytes: HyperLogLog稀疏结构表示字节的限制。该限制包括
    16个字节的头。当HyperLogLog使用稀疏结构表示
    这些限制,它会被转换成密度表示。
    值大于16000是完全没用的,因为在该点
    密集的表示是更多的内存效率。
    建议值是3000左右,以便具有的内存好处, 减少内存的消耗

    hll-sparse-max-bytes 3000
    

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

    5.hz:Redis调用内部函数来执行许多后台任务,比如在timeot中关闭客户端的连接,清除过期的密钥从未请求,等等。并非所有任务都以相同的频率进行,但Redis会检查根据指定的“hz”值执行的任务。默认情况下,“hz”设置为10.提高值时将使用更多的CPURedis是空闲的,但同时会使Redis更具响应性有很多键同时到期,超时可能会到期处理更精确。

    hz 10
    

    6.aof-rewrite-incremental-fsync:aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数

    aof-rewrite-incremental-fsync yes
    

    不怕从零开始,只怕从未启程!

    参考文献:https://chembo.iteye.com/blog/2054021
    Redis安装目录下的配置文件
    https://blog.csdn.net/mysqldba23/article/details/67640478
    延时监控:https://redis.io/topics/latency-monitor
    Redis中文官方教程:http://www.redis.net.cn/tutorial/3504.html

    相关文章

      网友评论

        本文标题:Redis实战-Redis配置(三)

        本文链接:https://www.haomeiwen.com/subject/qhebiqtx.html