Redis 配置文件参数 梦里梦外; 2022-12-14 13:51 150阅读 0赞 # Redis 配置文件参数 # Redis可以在没有配置文件的情况下使用内置的默认配置启动,但是这种设置只推荐用于测试和开发目的。 配置Redis的正确方法是提供一个Redis配置文件,通常称为Redis.conf。 conf文件包含了一些非常简单的格式的指令: keyword argument1 argument2 … argumentN 这是配置指令的一个例子: slaveof 127.0.0.1 6380 可以使用引号提供包含空格的字符串作为参数,如下例所示: requirepass “hello world” 通过命令行传递参数 由于Redis 2.6,也可以通过命令行直接传递Redis配置参数。这对于测试非常有用。下面的示例使用端口6380作为运行在端口6379的实例的从端口,启动一个新的Redis实例。 ./redis-server --port 6380 --slaveof 127.0.0.1 6379 将Redis配置为缓存 如果您打算将Redis用作每个键都将具有过期集的缓存,则可以考虑使用以下配置(例如,最大内存限制为2 MB): maxmemory 2mb maxmemory-policy allkeys-lru 在此配置中,应用程序无需使用EXPIRE命令(或等效命令)来设置密钥的生存时间,因为只要我们达到2兆字节的内存限制,所有的密钥都将使用近似的LRU算法逐出。 基本上,在此配置中,Redis的行为与memcached类似。 ## 网络配置 ## * bind 默认情况下,如果没有指定“绑定”配置指令,Redis会监听用于来自服务器上所有可用网络接口的连接。可以只监听一个或多个选择的接口"bind"配置指令,后面跟着一个或多个IP地址。 例子: bind 192.168.1.100 bind 127.0.0.1::1 ~警告~如果计算机运行Redis是直接暴露在绑定到所有接口是危险的,并且会暴露给互联网上的每个人 举个例子。默认情况下,我们取消注释,遵循绑定指令,这将迫使Redis只监听IPv4环回接口地址(这意味着Redis将能够只接受来自运行到同一计算机的客户端的连接运行 如果您确定希望您的实例侦听所有接口请注释下面一行。 \#bind 127.0.0.1 * protected-mode protected 模式是一层安全保护,以避免这种情况Redis实例在互联网上开放被访问和利用。 当保护模式开启时,如果 (1)未显式地将服务器绑定到一组地址“绑定”指令。 (2)服务器没有配置密码 那么只接受来自客户端的连接 IPv4和IPv6环回地址127.0.0.1和::1,并且来自Unix域套接字。 默认保护模式是启用的,只有当你确定你想要客户从其他主机连接到Redis,即使没有配置身份验证,也没有指定一组接口使用“bind”指令显式列出,此时可以考虑禁用它。 protected-mode yes * port 接受指定端口上的连接,默认为6379,如果端口0被指定,Redis将不会监听TCP套接字。 port 6379 * tcp-backlog 在每秒请求量高的环境中,您需要按顺序进行高积压避免缓慢的客户端连接问题。请注意Linux内核将悄悄地将其截断为 /proc/sys/net/core/somaxconn,所有确保提高 somaxconn 和 tcp\_max\_syn\_backlog 的值为了达到预期的效果。 tcp-backlog 511 * unixsocket 指定将用于侦听的Unix套接字的路径传入的连接。没有默认,所以Redis不会在未指定的unix套接字上监听。 unixsocket /tmp/redis.sock unixsocketperm 700 * timeout 在客户端空闲N秒后关闭连接(0禁用) timeout 0 * tcp-keepalive 如果非零,则使用 SO\_KEEPALIVE 向客户机发送TCP ACK 的确认。这样做原因是: (1)发现宕机的节点 (2)从网络拓扑图中检查节点连接是活的 在Linux上,指定的值(以秒为单位)是用于发送ACK的周期。注意,要关闭连接,需要双倍的时间。对于其他内核,周期取决于内核配置。 这个选项的合理值是300秒,这是新的值, Redis默认从Redis 3.2.1开始。 tcp-keepalive 300 ## 基础配置 ## * daemonize 默认情况下,Redis不作为守护进程运行。如果你需要的话,用yes。注意,当使用守护进程时,Redis将在/var/run/redisin中写入一个pid文件。 daemonize no * supervised 如果你通过 upstart 或 systemd 运行Redis,Redis可以和supervision选项交互使用。选项: ***不使用 supervision 交互*** supervised no ***使用upstart信号,进入SIGSTOP模式*** supervised upstart ***向$NOTIFY\_SOCKET写入READY=1来发送systemd信号*** supervised systemd ***自动检测upstart或systemd方法基于UPSTART\_JOB或NOTIFY\_SOCKET环境变量*** supervised auto * pidfile 如果pid文件被指定,Redis在启动时写入指定的位置并在退出时删除它。 当服务器运行非守护进程时,如果没有在配置文件指定pid文件,则不会创建任何pid文件。 当服务器以守护进程启动时,pid文件将会被使用,仅管没有指定pid文件, 退出时将被删除,默认为"/var/run/ redisi.pid"。 最好创建一个pid文件,如果不能创建它,也没有影响,服务器也将能正常启动和运行。 pidfile /var/run/redis\_6379.pid * loglevel 指定服务器的日志级别 debug(*大量信息,对开发/测试很有用*) verbose(*很多很少有用的信息,但不像调试级别那样混乱*) notice(*可能比较冗长,您在生产环境中想要的内容*) warning(*只有非常重要/关键的消息被记录*) 一般设置为: loglevel notice * logfile 指定日志文件名。空字符串也可以用来强制Redis的日志记录到标准输出。请注意,如果您使用标准(除守护进程),日志将被发送到/dev/null。 logfile “” * databases 设置数据库的数量。默认的数据库是DB 0,您可以选择在每个连接的基础上使用 SELECT dbid 来切换数据库。 dbid在0和数据库数量减1之间,比如数据库数量为16,那么dbid范围为 0~ 15 。 databases 16 * always-show-logo 默认情况下,如果标准输出是TTY, 当登录到Redis时会显示一个ASCII商标输出,仅在会话交互登录时显示该商标。 可以强制4.0版本之前在启动中设置以下选项为yes。 始终显示redis商标 always-show-logo yes ## RDB配置 ## * save 900 1 save 300 10 save 60 10000 选项 *save seconds changes* 根据给定的秒数和给定的次数,保存对数据库发生的写操作数的。 上面例子在以下任意场景下触发save操作: 900秒(15分钟)后,如果至少有一个键被改变 300秒(05分钟)后,如果至少有10个键被改变 60秒(01分钟)后,如果至少10000个键被改变 注意:你可以通过注释掉所有“保存”行为来完全禁用保存。也可以删除之前配置的所有保存,通过添加一个带有一个空字符串参数的save指令来表示: save “” * stop-writes-on-bgsave-error 默认情况下,如果RDB快照被启用,并且最新的一次保存失败, Redis将停止接受其它写操作。 这将使用户意识到数据没有持久化,正确地放在磁盘上,否则可能没有人会注意到灾难将会发生。 如果后台保存过程再次开始工作,Redis会自动再次允许写操作。 然而,如果你已经设置了适当的监视你的Redis服务器和持久性,你可能想要禁用这个功能,这样Redis将继续正常工作,即使磁盘有问题,权限,等等。 stop-writes-on-bgsave-error no * rdbcompression 压缩字符串对象使用LZF转储 .rdb数据库,默认设置为“是”,如果你想保留一些CPU资源,将其设置为’no’ ,但是如果你有可压缩的值或键,而没使用压缩的话,数据集可能会更大。 rdbcompression yes * rdbchecksum 由于RDB版本5,CRC64校验和放在文件的末尾,这使得格式更能抵抗损坏。但有性能损耗(大约10%)当保存和加载RDB文件,所以你可以禁用它以获得最佳表现。RDB文件在禁用校验和的情况下创建的校验和为零告诉加载代码跳过检查。 rdbchecksum yes * dbfilename 转储数据库的文件名 dbfilename dump.rdb * dir 工作目录,DB将被写入这个目录中,文件名指定使用’dbfilename’配置指令。Append Only文件也将在此目录中创建。 注意,这里必须指定目录,而不是文件名。 dir ./ ## 复制配置 ## * replica-serve-stale-data 当一个副本失去了它与主服务器的连接,或者当复制仍在进行中,副本可以采取两种不同的方式: (1)如果 replica-serve-stale-data 设置为’yes’(默认),则副本将会仍然回复客户端请求,可能使用过期的数据,或者 如果是第一次同步,数据集可能是空的。 (2)如果 replica-serve-stale-data 设置为“no”,副本将回应所有类型的请求命令"SYNC with master in progress" 的错误,除了 INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY。 replica-serve-stale-data yes * replica-read-only 您可以配置一个副本实例来接受或不接受写操作。对一个副本实例写一些临时数据(因为数据写在副本将很容易删除,当与主同步后),但也可能导致问题,如果客户端写入它,因为错误配置。 Redis 2.6默认情况下副本是只读的。 注意:只读副本不会被设计为公开给不受信任的客户端在互联网上。它只是防止实例宕机的保护层。 默认情况下,仍然是一个只读副本导出所有管理命令,比如配置、调试等等。在有限的范围内,你可以改进使用’rename-command’来隐藏所有的管理/危险命令。 replica-read-only yes * repl-diskless-sync 警告:无磁盘复制目前处于试验阶段,新副本、或副本重新连接无法进行差异复制,需要做的就是所谓的“满”同步”。RDB文件从主服务器传输到副本服务器。 repl-diskless-sync no * repl-diskless-sync-delay 当启用无磁盘复制时,可以配置延迟服务器等待,以便生成通过套接字传输RDB的子节点到副本,这一点很重要,因为一旦转移开始,就不可能服务新的副本到达,它将排队等待下一次RDB传输,所以服务器等待一个延迟,以便让更多副本到达。延迟以秒为单位指定,默认为5秒。禁用它完全只是设置为0秒,传输将尽快开始。 repl-diskless-sync-delay 5 * repl-disable-tcp-nodelay 在复制套接字上禁用TCP\_NODELAY后同步,如果你选择“是”,Redis将使用更少的TCP数据包和发送数据给副本的带宽更少。但这可能会在副本端的增大数据延迟,最多40毫秒使用默认配置的Linux内核。 repl-disable-tcp-nodelay no * replica-priority 副本优先级是由Redis在INFO输出中发布的一个整数。它被Redis哨兵用来选择一个副本提升为master,如果master不再正常工作。具有低优先级编号的副本被认为更适合升级,因此例如,如果有三个优先级为10,100,25的副本,那么Sentinel就会 选择优先级为10的那一个,那是最低的。但是,如果一个特殊的优先级为0,则表示该副本无法执行,所以优先级为0的副本将永远不会被选择Redis哨兵促销。默认情况下优先级为100。 replica-priority 100 ## 安全配置 ## * requirepass 要求客户出具认证密码后再处理任何其他命令。这在您不信任的环境中可能非常有用,能够访问运行redis-server的主机的其他用户。 应该保持注释为向后兼容性,因为大多数人们不需要认证(例如,他们运行自己的服务器)。 警告:由于Redis是相当快的外部用户可以尝试每秒150k个密码。这意味着你应该使用非常强的密码,否则很容易被破解。 requirepass foobared ## 客户端配置 ## * maxclients 设置同时连接的客户端的最大数量。默认情况下这个限制被设置为10000个客户端,但是如果Redis服务器没有能够配置进程文件限制以允许指定的限制,允许的最大客户端数量设置为当前文件限制(因为Redis保留了一些内部使用的文件描述符)。 一旦达到限制,Redis将关闭所有发送的新连接错误“达到的最大客户数量”。 maxclients 10000 ## 内存配置 ## * maxmemory 设置指定字节数的内存使用限制。当达到内存限制时,Redis会尝试删除键,根据所选的回收策略(请参阅maxmemory-policy)。如果Redis不能根据策略删除键,或者如果该策略是设置为“noeviction”,Redis将开始回复错误的命令,这会使用更多的内存,比如SET、LPUSH等等,并且会继续返回只读命令,如GET。 当使用Redis作为LRU或LFU缓存或to时,这个选项通常很有用为实例设置硬内存限制(使用“noeviction”策略)。 警告:如果您将副本附加到带有maxmemory的实例上,减去提供副本所需的输出缓冲区的大小,从使用的内存计数,以便网络问题/重新同步将不触发循环,在循环中,键被逐出,然后输出副本的缓冲区满是触发删除的键数更多键的,以此类推,直到数据库被完全清空。 简而言之……如果你附上副本,建议你设置一个较低的限制maxmemory,以便在系统上有一些空闲内存用于复制输出缓冲区(但如果策略是’noeviction’,则不需要使用此方法)。 * maxmemory-policy MAXMEMORY策略:当MAXMEMORY已达到,Redis将如何选择删除键,你可以从五种行为中选择: volatile-lru→在设置了过期值的键之间使用近似的LRU进行驱逐。 allkeys-lru→使用近似的LRU驱逐任何密钥。 volatile-lfu→在具有过期集的键之间使用近似的LFU逐出。 allkeys-lfu→使用近似的LFU驱逐任何密钥。 volatile-random→从具有过期集的键中删除随机键。 allkeys-random→删除一个随机的键,任何键。 volatile-ttl→删除最近过期时间的密钥(较小的TTL) noeviction→不驱逐任何东西,只是在写操作上返回一个错误。 LRU表示最近最少使用, LFU表示使用频率最低。 LRU、LFU 和 volatile-ttl 都是使用近似值实现的随机算法。 注意:任何上述政策,当没有合适的键用于驱逐时, Redis将返回一个错误写操作。 默认值为: maxmemory-policy noeviction * maxmemory-samples LRU、LFU 和 volatile-ttl 算法不是精确算法,而是近似算法算法(为了节省内存),所以您可以调优它的速度或准确性。默认情况下,Redis会检查五个键,然后选择其中一个最近使用较少,您可以使用以下方法更改示例大小配置指令。 默认为5会产生足够好的结果。10非常接近真正的LRU,但需要更多的CPU。3更快,但不是很准确。 maxmemory-samples 5 * replica-ignore-maxmemory 从Redis 5开始,默认情况下,副本将忽略其maxmemory设置(除非在故障转移后或手动提升为主节点) 此行为可确保母版和副本保持一致,并且通常您想要的内容,但是如果副本是可写的,或者您希望副本具有不同的内存设置,并且可以确定所有写入复制品是幂等的,那么您可以更改此默认值(但一定要了解你在做什么)。 请注意,由于默认情况下该副本不会退出,因此可能会使用更多副本内存比通过maxmemory设置的内存多(某些缓冲区可能在副本上更大,否则数据结构有时会占用更多内存)。因此,请确保您监视副本并确保副本足够内存永远不会在主机命中之前达到真正的内存不足状态 replica-ignore-maxmemory yes ## LAZY配置 ## Redis有两个删除键的原语。一个叫做DEL,是一个阻塞删除对象。这意味着服务器停止处理新命令。为了在同步中回收与对象关联的所有内存办法。如果删除的键与小对象相关联,则需要时间,为了执行DEL命令非常小,可与大多数其他设备相比 Redis中的O(1)或O(log\_N)命令。但是,如果密钥与包含数百万个元素的聚合值,服务器可能阻止长时间(甚至几秒钟)以完成操作。 由于上述原因,Redis还提供了非阻塞删除原语,例如 UNLINK(非阻塞DEL)和 FLUSHALL 的 ASYNC 选项,以及 FLUSHDB 命令,以便在后台回收内存。这些命令在固定时间内执行。另一个线程将逐步释放尽可能快地在后台对象。 FLUSHALL 和 FLUSHDB 的 DEL,UNLINK 和 ASYNC 选项是用户控制的。 由应用程序的设计来了解何时是一个好的选择使用一个或另一个的想法。但是,Redis服务器有时必须 删除键或刷新整个数据库,这是其他操作的副作用。特别是Redis会独立于用户调用中的对象删除对象 以下方案: 1)驱逐时,由于maxmemory和maxmemory策略配置,以便为新数据腾出空间,而无需遍历指定的内存限制。 2)由于过期:当一个密钥具有关联的生存时间(请参见EXPIRE命令)必须从内存中删除。 3)由于将数据存储在键上的命令的副作用,该键可能会已经存在。例如,RENAME命令可能会删除旧密钥内容被另一内容替换时。同样的SUNIONSTORE或带有STORE选项的SORT可能会删除现有密钥。SET命令本身会删除指定密钥的所有旧内容以进行替换使用指定的字符串。 4)在复制过程中,当副本使用以下命令执行完全重新同步时:它的主人,整个数据库的内容被删除以便加载刚传输的RDB文件。 在上述所有情况下,默认设置都是以阻止方式删除对象,就像是否调用了DEL。但是,您可以专门配置每种情况以便以非阻塞方式释放内存,例如UNLINK使用以下配置指令调用了: * lazyfree-lazy-eviction no * lazyfree-lazy-expire no * lazyfree-lazy-server-del no * replica-lazy-flush no ## AOF配置 ## * appendonly no * appendfilename “appendonly.aof” * appendfsync everysec * no-appendfsync-on-rewrite no * auto-aof-rewrite-percentage 100 * auto-aof-rewrite-min-size 64mb * aof-load-truncated yes * aof-use-rdb-preamble yes ## 慢日志配置 ## * slowlog-log-slower-than 10000 * slowlog-max-len 128 ## 高级配置 ## * hash-max-ziplist-entries 512 * hash-max-ziplist-value 64 * list-max-ziplist-size -2 * list-compress-depth 0 * set-max-intset-entries 512 * zset-max-ziplist-entries 128 * zset-max-ziplist-value 64 * hll-sparse-max-bytes 3000 * stream-node-max-bytes 4096 * stream-node-max-entries 100 * activerehashing yes * client-output-buffer-limit normal 0 0 0 * client-output-buffer-limit replica 256mb 64mb 60 * client-output-buffer-limit pubsub 32mb 8mb 60 * hz 10 * dynamic-hz yes * aof-rewrite-incremental-fsync yes * rdb-save-incremental-fsync yes
还没有评论,来说两句吧...