Redis配置文件redis.conf详解

2022-11-28 15:50:11 浏览数 (1)

文章目录

    • 常用配置
    • 进阶配置
      • 主从复制
      • 安全
      • 限制 CLIENTS
      • RDB模式相关配置
      • AOF模式 appendonly配置
      • slowlog
      • INCLUDES
      • vm相关
      • 其他配置

常用配置

Redis支持很多的参数配置,但都有默认值daemonize默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes。 protected-mode保护模式,protected-mode设置为yes的情况下,为了我们的应用服务可以正常访问Redis,我们需要设置Redis的bind参数或者密码参数requirepass。 bind指定 Redis只接收来自于该IP地址的请求,如果设置成0.0.0.0表示接收所有ip请求,不建议使用。 port监听端口,默认为6379。 databases设置数据库的个数,默认使用的数据库是0。 save设置Redis进行数据库镜像备份的频率。

#如果900秒内至少1个key发生变化(新增、修改和删除),则重写rdb文件; save 900 1 #如果每300秒内至少10个key发生变化(新增、修改和删除),则重写rdb文件; save 300 10 #如果每60秒内至少10000个key发生变化(新增、修改和删除),则重写rdb文件。 save 60 10000

dbfilename镜像备份文件的文件名。 dir数据库镜像备份的文件放置的路径。 requirepass设置客户端连接后进行任何其他指定前需要使用的密码。 maxclients限制同时连接的客户数量。 maxmemory设置redis 能够使用的最大内存。 logfile 日志文件名。

进阶配置

stop-writes-on-bgsave-error 持久化如果出错,是否还需要继续工作。 loglevel 指定日志记录级别。

Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose debug 记录很多信息,用于开发和测试 varbose 有用的信息,不像debug会记录那么多 notice 普通的verbose,常用于生产环境 warning 只有非常重要或者严重的信息会记录到日志

timeout设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接,0是关闭此设置

主从复制

slaveof <masterip> <masterport>主从复制。设置该数据库为其他数据库的从数据库。设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步。这里永久性的设置主机IP(设置后自己视为从节点) masterauth <master-password>当master服务设置了密码保护时(用requirepass制定的密码)slave服务连接master的密码。 slave-serve-stale-data当从库同主机失去连接或者复制正在进行,从库有两种运行方式:

  1. 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求
  2. 如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress"

repl-ping-slave-period从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒。 总结就是上面间隔多少秒发送一次检测存活的pingPong信号,下面repl-timeout就是判定发送这个信号后的返回超时时间。 repl-timeout 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒。一定要确保repl-timeout大于repl-ping-slave-period。

安全

requirepass设置客户端连接后进行任何其他指定前需要使用的密码。警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 rename-command命令重命名。

在一个共享环境下可以重命名相对危险的命令。比如把CONFIG重名为一个不容易猜测的字符。 举例: rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 如果想删除一个命令,直接把它重命名为一个空字符""即可,如下: rename-command CONFIG “”

限制 CLIENTS

maxclients限制同时连接的客户数量。 maxmemory设置redis 能够使用的最大内存。 maxmemory-policy 内存达到上限的处理策略,有以下几种策略

volatile-lru :利用 LRU 算法移除设置过过期时间的 key 。 volatile-random :随机移除设置过过期时间的 key 。 volatile-ttl :移除即将过期的 key ,根据最近过期时间来删除(辅以 TTL ) allkeys-lru :利用 LRU 算法移除任何 key 。 allkeys-random :随机移除任何 key 。 noeviction :不移除任何 key ,只是返回一个写错误。 默认是:maxmemory-policy volatile-lru LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。

RDB模式相关配置

rdbcompression存储至本地数据库时(持久化到rdb文件)是否压缩数据,需要消耗一些cpu的资源,默认为yes rdbchecksum保存rdb文件的时候,进行错误的检查校验。 dirrdb文件保存的目录,如:/www/server/redis/ dbfilenameRDB后,本地持久化数据库文件名,默认值为dump.rdb(持久化的数据都会保存在这个文件里然后准备刷盘)

AOF模式 appendonly配置

appendonly 默认是no,不开启AOF模式的,默认是使用RDB方式持久化的,在大部分使用的情况下,RDB完全够用了 appendfilename 持久化的文件的名字,如:“appendonly.aof” appendfsync同步策略。

#appendfsync always #每次修改都会 sync 消耗性能 appendfsync everysec #每秒执一次 sync,可能会丢失这1s的数据 #appendfsync no #不执行 sync 这个时候操作系统自己同步数据,数据最快

AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作。在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理。为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite。 AOF 自动重写,当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定) 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动 同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况 设置 percentage 为0就关闭这个特性 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb

slowlog

slowlog-log-slower-thanRedis Slow Log 记录超过特定执行时间的命令。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执行时间。可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微秒),另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除 。注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录slowlog-max-len对日志长度没有限制,只是要注意它会消耗内存,可以通过 SLOWLOG RESET 回收被慢日志消耗的内存。

INCLUDES

include指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使加粗样式用同一份配置文件,而同时各个实例又拥有自己的特定配置文件,如:

include /path/to/local.conf include /path/to/other.conf

vm相关

vm-enabled指定是否启用虚拟内存机制,默认值为no,简单介绍一下,VM机制将数据分页存放,由redis将访问量较小的页即冷数据 swap到磁盘上,访问多的页面由磁盘自动换出到内存中。 vm-swap-file虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个redis实例共享。 vm-max-memory将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为 0。 vm-page-sizeredis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是根据存储的数据大小来设定的,作者建议如果储存很多小对象,page大小最好设置为32或者64bytes;如果存储很多大对象,则可以使用更大的page,如果不确定,就使用默认值。 vm-pages设置swap文件中page数量,由于页表(一种表示页面空闲或使用的bitmap)是放在内存中的,在磁盘上每8个pages将消耗1byte的内存: vm-max-threads设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成长时间的延迟。默认值为4。 glueoutputbuf yes设置在客户端应答时,是否把较小的包含并为一个包发送,默认为开启:

其他配置

当hash中包含超过指定元素个数并且最大的元素没有超过临界时, hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值 Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现, 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap, 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

hash-max-zipmap-entries 512 hash-max-zipmap-value 64

list数据类型多少节点以下会采用去指针的紧凑存储格式。 list数据类型节点值大小小于多少字节会采用紧凑存储格式。

list-max-ziplist-entries 512 list-max-ziplist-value 64

set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

set-max-intset-entries 512

zsort数据类型多少节点以下会采用去指针的紧凑存储格式。 zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。

zset-max-ziplist-entries 128 zset-max-ziplist-value 64

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

activerehashing yes

本文内容到此结束了, 如有收获欢迎点赞

0 人点赞