• Redis的配置文件redis.conf详解


    Redis的配置文件位于redis的安装目录下,一般不要直接操作出厂设置的配置文件,需要对其进行备份。# Redis的配置文件样例:

    # Redis configuration file example.# 
    # 请注意,为了读取到配置文件,Redis必须文件路径作为第一个参数来启动: # # .
    /redis-server /path/to/redis.conf
    # 关于单位的一些注意事项:
    # 对大小写不敏感 # Note on units: when memory size is needed, it is possible to specify # it in the usual form of 1k 5GB 4M and so forth: # # 1k
    => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # units are case insensitive so 1GB 1Gb 1gB are all the same.

    1.INCLUDE部分:

    ################################## INCLUDES ###################################
    
    # 在配置多个服务器时很有用,比如,多个服务器的很多个配置项是相同的,但是少部分配 
    # 置又要不相同,例如:bind等配置,这时可以将相同的配置抽取出来,作为一个单独文件. 
    # 其他配置项根据不同的服务器做不同的配置,最后通过include引用;如果include放在文件
    # 的开头,那么redis.conf的配置会覆盖引入文件中的配置,所以如果想要使用引入文件中的配置
    # 可以将include放在最后
    # include /path/to/local.conf
    # include /path/to/other.conf

    2.MODULES部分:

    ################################## MODULES #####################################
    
    # Load modules at startup. If the server is not able to load modules
    # it will abort. It is possible to use multiple loadmodule directives.
    #
    # loadmodule /path/to/my_module.so
    # loadmodule /path/to/other_module.so

    NETWORK部分:

    ################################## NETWORK ###################################### 
    # 默认情况下,如果未指定“ bind”配置指令,则Redis监听服务器上所有可用网络接口的连接。
    # 可以使用“ bind”配置指令侦听一个或多个选定接口,然后侦听一个 或更多IP地址
    # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # # ~~~ WARNING ~~~
    # 如果运行Redis的电脑直接暴露在互联网中,那么就会将实例暴露给所有人,这是很危险的。
    # 指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求 bind 127.0.0.1 # Protected mode is a layer of security protection, in order to avoid that # Redis instances left open on the internet are accessed and exploited. # # 当开启保护模式时,即使没有绑定任何IP,也没有配置密码,Redis仍然只接受本机的访问 # # The server only accepts connections from clients connecting from the # IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain # sockets. # # By default protected mode is enabled. You should disable it only if # you are sure you want clients from other hosts to connect to Redis # even if no authentication is configured, nor a specific set of interfaces
    # are explicitly listed using the
    "bind" directive. protected-mode yes # redis监听的端口号。 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

    
    # 配置unix socket来让redis支持监听本地连接。 
    # unixsocket /var/run/redis/redis.sock
    # 配置unix socket使用文件的权限
    # unixsocketperm 700 # 此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。 timeout 0

     # tcp keepalive参数。如果设置不为0,就使用配置的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而

     # 导致网络看似连接却已经与对端端口的问题。

     # 在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。

     此选项的合理值是300秒,这是从Redis 3.2.1开始的新Redis默认值

    tcp-keepalive 300

    GENERAL部分:

    ################################# GENERAL #####################################
    
    #
    默认情况下,Redis不会作为守护程序运行。 如果需要,请使用“yes”
    #
    请注意,Redis守护进程将在/var/run/redis.pid中写入一个pid文件

    daemonize yes
    
    # If you run Redis from upstart or systemd, Redis can interact with your
    # supervision tree. Options:
    #   supervised no      - no supervision interaction
    #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
    #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
    #   supervised auto    - detect upstart or systemd method based on
    #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
    # Note: these supervision methods only signal "process is ready."
    #       They do not enable continuous liveness pings back to your supervisor.
    supervised no

    # 进程管道id文件,如果指定了pid文件,则Redis会在启动时将其写入指定位置,然后在退出时将其删除。
    # 当服务器在非守护进程下运行时,如果没有pid文件,则不会创建在配置中指定。
    # 当服务器是后台进程时,pidfile是不被指定也会被使用,默认为
    /var/run/redis.pid
    # 如果Redis无法创建它,则不会发生任何不良情况,服务器将正常启动并运行。
    pidfile /var/run/redis_6379.pid
    
    # 日志级别:
    # debug (开发/测试阶段)
    # verbose (有用信息比较少,但不会像debug这么混乱)
    # notice (中等冗长,您可能想在生产中使用)
    # warning (用于生产环境)
    loglevel notice
    
    # 用于指定记录日志的文件,空字符串的话,日志会打印到标准输出设备中。后台运行的redis的标准输出是/dev/null
    logfile ""
    
    # 是否打开记录syslog的功能
    # syslog-enabled no
    
    # syslog的标识符
    # syslog-ident redis
    
    # 指定syslog的设备,值可以是user或者是local0-local7
    # syslog-facility local0
    
    # 数据库的数量,默认使用的是数据库0,可以使用select命令来切换数据库
    databases 16
    
    # By default Redis shows an ASCII art logo only when started to log to the
    # standard output and if the standard output is a TTY. Basically this means
    # that normally a logo is displayed only in interactive sessions.
    #
    # However it is possible to force the pre-4.0 behavior and always show a
    # ASCII art logo in startup logs by setting the following option to yes.
    always-show-logo yes

     SNAPSHOTTING部分(Redis持久化之rdb):

    ################################ SNAPSHOTTING ################################
    # Redis的持久化 # Save the DB on disk: # 保存格式: # save
    <seconds> <changes> #
    # 如果同时发生了给定的秒数和给定的针对数据库的写操作,那么就会保存到数据库。
    # # 在下面的实例中就会出现持久化: # 在900s(15min)后,至少有1个键值发生变化 # 在300s(5min)后,至少修改了10个键值发生了变化 # 在60s(1min)后,至少修改了10000个键值发生了变化 # # 注意:你可以注释掉所有的save命令来禁用save # # 也可以通过配置带有单个空字符串参数的save命令来删除所有先前配置的save指令 # 如下所示: # # save "" save 900 1 save 300 10 save 60 10000 # 默认情况下,如果启用rdb快照保存失败,那么Redis将停止接受写入 # 这就会使用户能够意识到数据不能正确地持久化存储在磁盘上,否则很可能会没人注意到并发生一些灾难 # 如果后台保存过程将再次开始工作,那么Redis就会自动允许再次写入 # 当rdb出现问题时,是否依然继续进行工作,yes:不能进行工作,no:可以进行工作
    # 如果配成no的话,表示你不在乎数据的不一致或者有别的办法来控制或者维护
    stop-writes-on-bgsave-error yes # 对于存储到磁盘中的快照,你可以设置是和否进行压缩存储。如果是的话,Redis会使用LZF压缩算法进行压缩, # 如果不想消耗CPU来进行压缩的话,可以关闭此功能。其实影响不大。 rdbcompression yes # 在存储和加载rdb文件的时候是否使用CRC64校验和来进行校验,如果开启,将消耗一定的性能,保持默认设置即可。 # 在禁用校验和的情况下创建rdb文件,校验和为0,这将指示加载代码跳过校验。 rdbchecksum yes # rdb的文件的名称 dbfilename dump.rdb # 工作目录: # 在哪个目录下启动Redis,那么这个路径就是工作目录,那么redis的日志就是生成在这个目录下 # 数据目录,数据库的写入就是在这个目录下。aof和rdb文件也会写入这个文件夹中。 # 请注意,您必须在此指定路径而不是文件名。
    # 可以使用config get dir命令来获取工作目录。
    dir .
    /

    如何触发RDB快照:

    1.配置文件中的默认快照设置(冷拷贝之后重新使用 copy dump.rdb dump_new.rdb,最好主机和备份机是两台服务器)

    2.命令save和bgsave都可以立即生成dump.rdb文件然后之前的旧的rdb文件

      save:save只管保存,即当之前save命令的时候,就无法存储数据了

      bgsave:Redis会在后台异步进行快照操作。

      执行flushall命令也会立即生成dump.rdb文件但是此文件为空。

    如何恢复Redis中的数据:

      将备份文件复制到Redis的暗安装目录下,然后重新启动服务。

    RDB的优势:
      适合大数据内容的存储和恢复

      相较于AOF,RDB更适合大数据集的恢复

    RDB的劣势:

      容易丢失最后一次数据的快照

      在fork一个子进程的时候,接下来的工作全部由子进程来操作,父进程不进行任何IO操作,所以内存中的数据被克隆了一份,内存的膨胀需要考虑。

    如何停止:

      动态停止所有保存rdb保存规则的方法:redis-cli config save ""

    SECUTITY部分:

    ################################## SECURITY ###################################
    
    #
    # 需要用户在执行任何命令之前先输入AUTH<PASSWORD>
    # # 为了保持向后兼容,应该注释掉该命令,因为大部分的用户也不要认证。
    # # 警告:在使用requirepass的时候,由于redis实在是太快了,所以因为设置一个更加安全的密码 # # requirepass foobared # 命令重命名。 # 可以在共享环境中更改危险命令的名称。 例如,可以将CONFIG命令重命名为一些难以猜测的名称,以便它仍可用于内部使用的工具,但不适用于一般客户。 # 例如: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # # 通过将命令重命名为空字符串也可以完全取消该命令: # rename-command CONFIG "" # # 请注意,更改登录到AOF文件或传输到副本的命令的名称可能会导致问题。

    secutity部分是全部被注释掉的,所以Redis默认是不需要输入密码的,因为Redis是在Linux环境下的服务器中运行,那么安全要求肯定是很高的。

    Clients部分:

    ################################### CLIENTS ####################################
    
    # 设置同时连接的最大客户端数量。默认情况下,此限制设置为10000个客户端连接,
    # 但是,如果Redis服务器无法配置进程文件限制以允许指定的限制,则允许的最大客户端数将设置为当前文件限制减去32(因为Redis保留了 内部使用的文件描述符很少)
    # 一旦达到限制,Redis将关闭所有新连接,并发送错误消息“已达到最大客户端数”。
    # maxclients
    10000

    内存管理MEMORY MANAGEMENT部分:

    ############################## MEMORY MANAGEMENT ################################
    

      # 设置能连上redis的最大客户端连接数量。默认是10000个客户端连接。由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,所以maxclients最小建议设置到      # 32。如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接。

    # 当达到内存限制时,Redis将尝试根据所选的逐出策略(请参见maxmemory-policy)删除key。
    # 当Redis无法根据策略删除key时,或者如果策略被设置为“noeviction”时,Redis会对set、push这些指令返回错误消息,而对get之类的指定继续回复
    # 当将Redis用作LRU或LFU缓存,或为实例设置硬盘限制(使用“ noeviction”策略)时,此选项通常很有用。
    # 注意slave的输出缓冲区是不计算在maxmemory内的。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些。
    # maxmemory <bytes>
    
    # MAXMEMORY POLICY: 当内存容量超过设置的maxmemory后的处理策略:
    #
    # volatile-lru -> 利用LRU算法移除设置过过期时间的key
    # allkeys-lru -> Evict any key using approximated LRU.
    # volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
    # allkeys-lfu -> Evict any key using approximated LFU.
    # volatile-random -> 随机移除设置过过期时间的key。
    # allkeys-random -> Remove a random key, any key.
    # volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
    # noeviction -> Don't evict anything, just return an error on write operations.
    #
    # LRU means Least Recently Used
    # LFU means Least Frequently Used
    #
    # Both LRU, LFU and volatile-ttl are implemented using approximated
    # randomized algorithms.
    #
    # Note: with any of the above policies, Redis will return an error on write
    #       operations, when there are no suitable keys for eviction.
    #
    #       At the date of writing these commands are: set setnx setex append
    #       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
    #       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
    #       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
    #       getset mset msetnx exec sort
    #
    # The default is:
    #
    # maxmemory-policy noeviction
    
    # LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated
    # algorithms (in order to save memory), so you can tune it for speed or
    # accuracy. For default Redis will check five keys and pick the one that was
    # used less recently, you can change the sample size using the following
    # configuration directive.
    #
    # The default of 5 produces good enough results. 10 Approximates very closely
    # true LRU but costs more CPU. 3 is faster but not very accurate.
    #
    # maxmemory-samples 5
    
    # Starting from Redis 5, by default a replica will ignore its maxmemory setting
    # (unless it is promoted to master after a failover or manually). It means
    # that the eviction of keys will be just handled by the master, sending the
    # DEL commands to the replica as keys evict in the master side.
    #
    # This behavior ensures that masters and replicas stay consistent, and is usually
    # what you want, however if your replica is writable, or you want the replica to have
    # a different memory setting, and you are sure all the writes performed to the
    # replica are idempotent, then you may change this default (but be sure to understand
    # what you are doing).
    #
    # Note that since the replica by default does not evict, it may end using more
    # memory than the one set via maxmemory (there are certain buffers that may
    # be larger on the replica, or data structures may sometimes take more memory and so
    # forth). So make sure you monitor your replicas and make sure they have enough
    # memory to never hit a real out-of-memory condition before the master hits
    # the configured maxmemory setting.
    #
    # replica-ignore-maxmemory yes

    APPEND ONLY MODE(Redis持久化之aof)

    ############################## APPEND ONLY MODE ###############################
    
    # 默认情况下,redis异步将数据写入磁盘中。此模式在许多应用中已经足够好了,但是redis进程问题或者电源中断可能会导致
    # 几分钟的写入丢失(取决于配置的保存点)
    
    # 可以同时启用aof和rdb,并且redis先加载aof
    # aof是默认关闭的,需要手动开启
    
    appendonly no
    
    # aof文件的名称为appendonly.aof
    
    appendfilename "appendonly.aof"
    
    # Redis支持三种模式:
    # appendfsync always: 持续持久化,每次数据发生变更就会记录到磁盘中,数据完整性较好但性能较差
    # appendfsync everysec: 出厂默认推荐,每秒记录一次,如果一秒内出现宕机,有数据丢失
    # appendfsync no :从不同步
    # 如果不确定,就是用默认出厂推荐everysec 
    # appendfsync always appendfsync everysec # appendfsync no # 重写数据的时候能否使用appendfsync对aof文件进行数据的追加。 # 默认使用no,保证数据的一致性。 no-appendfsync-on-rewrite no # 自动重写aof文件 # 当AOF文件大小增加指定百分比时,Redis会自动调用BGREWRITEAOF 进行重写 # # 触发机制:Redis会记住最近一次重写后文件的大小(如果自重新启动以来,没有发生过重写,那么就是用启动时aof文件的大小) # 将当前文件的大小和之间记录的文件的大小进行比较,如果超过了指定的百分比就会进行重写。另外,需要指定文件的最小大小,即使超过了指定的百分比,但是没有超过最小的文件大小,也是不会重写的。 # 这对于重写aof文件非常有用。
    # 100%就是一倍 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # # If aof-load-truncated is set to yes, a truncated AOF file is loaded and # the Redis server starts emitting a log to inform the user of the event. # Otherwise if the option is set to no, the server aborts with an error # and refuses to start. When the option is set to no, the user requires # to fix the AOF file using the "redis-check-aof" utility before to restart # the server. # # Note that if the AOF file will be found to be corrupted in the middle # the server will still exit with an error. This option only applies when # Redis will try to read more data from the AOF file but not enough bytes # will be found. aof-load-truncated yes # When rewriting the AOF file, Redis is able to use an RDB preamble in the # AOF file for faster rewrites and recoveries. When this option is turned # on the rewritten AOF file is composed of two different stanzas: # # [RDB file][AOF tail] # # When loading Redis recognizes that the AOF file starts with the "REDIS" # string and loads the prefixed RDB file, and continues loading the AOF # tail. aof-use-rdb-preamble yes

      相同数据集的数据要远大于rdb文件,恢复速度较慢,所以导致aof的运行效率较慢。

    AOF总结:

      1.RDB持久化方式能够在指定的时间间隔内对数据进行快照存储

      2.AOF持久化操作记录每次对数据的写的操作,当服务器重启的时候就会重新执行这些命令来恢复原始的数据。AOF命令还能以Redis追加协议追加保存每次写的操作到文件的末尾。

      3.当两种持久化方式都出现的时候,先加载aof文件恢复原始数据。因为AOF文件保存的数据要比RDB文件来的完整。建议不要只使用AOF

      4.性能推荐:

        因为RDB只用作后备用途,建议只在Slave上保存RDB文件,而且只要15分钟备份一次就够了。只保留save 900 1这条命令就够了。

        如果Enable AOF,好处是在最坏的情况下不会丢失超过两秒的数据,启动脚本比较简单,只要load自己的aof文件就行了。代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写入到新文件中造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小是64M,太小了,可以设置到5G以上。默认超过原大小的100%时就会触发重写机制。

        如果不Enable AOF,只靠Master-slave Replication实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master Slave同时倒掉,会丢失十几分钟的数据;载入脚本也要比较Master和Slave的RDB文件,加载较新的那个。

  • 相关阅读:
    数组
    基本类型与封装类
    类与对象以及引用以及内存
    (一)eclipse Dynamic web project 工程目录以及文件路径问题
    jdbc
    连接
    curl命令
    java annotation
    websocket
    Trie(前缀树)和ternary trie和binary search tree
  • 原文地址:https://www.cnblogs.com/wsxdev/p/11594678.html
Copyright © 2020-2023  润新知