redis配置文件的那些事儿

1、redis内存单位说明

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

2、include其他conf文件

可以将多个service共有的配置项放到一个公共conf文件中,而在每个服务器对应的conf中配置定制化的配置项,使用include的方式加载共有配置项。而且被include的conf还可以include其他conf文件。

include不会被admin或者redis sentinel的CONFIG REWRITE命令覆盖。对于同一个配置项的多次配置,redis总是使用最后一次出现的配置。

3、network

如果没有设置bind配置项,redis会监听服务器上所有的连接请求。可以通过bind指定一个或多个ip地址使redis只监听一个或多个指定的interfaces。

安全模式是一个安全保护层,为了防止redis实例被访问和利用。当设置了安全模式(protected-mode yes),并且没有设置了bind配置项且没有设置密码,则redis server将只会接受来自ipv4和ipv6的回环地址127.0.0.1和::1以及Unix域套接字的请求。当其他机器尝试建立连接时,会提示:

(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

4、timeout

timeout配置项设置当client空闲n秒之后关闭连接,0表示不关闭连接(telnet 方式生效,php中无效,redis-cli无效)

5、日志级别

loglevel 指定redis的日志级别
debug 很多信息,对开发和测试有帮助
verbose 很多很少有用的信息,但是不像debug级别那样混乱
notice 适度的冗长,可以在生产环境中使用(默认)
warning 只会记录非常重要的信息

logfile配置项指定日志文件的名称。当logfile为空字符串时,强制redis将日志输出的标准输出。如果使用了标准输出但是server后台运行,日志将会被输出到/dev/null
6、快照
将DB持久化到磁盘:
save <seconds> <changes>
当DB在指定的秒数中发生了指定的写操作数,就会对DB进行save。
可以通过增加一个save参数为空字符串的配置项来使前面配置的save配置项失效

如果设置了rdb快照,当最近一次后台持久化失败时,redis默认会停止接受写请求。当后台持久化进程重新工作时,redis也会自动允许写操作。

7、复制
主从复制。使用slaveof配置项指定一个redis实例是另一个redis服务器的一个复制。
1)redis的复制是异步的,当master无法与指定数量的slave建立连接时,其会停止接受写操作请求。
2)当slave与master的复制连接断开很少几次,redis的slave可以与master进行部分数据的重新同步。可以根据自己的需要配置复制积压的大小。
3)复制是自动进行无需用户干预的。网络中断之后,slave会自动尝试重连master来重新同步。

如果master使用了password,在开始复制之前要先告知slave验证权限,否则master会拒绝slave的请求。
当slave丢失了与master的连接,或者当复制正在进行中,slave可以表现两种不同的形式:
1)slave-serve-stale-data设置为yes,slave仍将回应客户端的请求,有可能是过期的数据或者如果是在第一次同步就丢失连接则为空数据
2)设置为no,slave将对除info和slaveof以外的所有命令回复SYNC with master in progress

复制同步策略:disk或socket
diskless复制目前是实验阶段
新加入的slave和重新连接的slave不能继续只接受不同的复制进程,需要进行所谓的“全同步”。会将rdb文件从master传送到slave。传输可以以两种方式进行:
1)disk-backed:redis master创建一个新进程将rdb写到磁盘上。稍后该文件将由父进程以增量的方式传输到slave。
2)diskless:redis master创建一个新进程直接将rdb文件写入slave的socket,而无需磁盘。
当使用disk-backed复制,rdb文件生成之后,当前处理rdb文件的子进程完成其工作后,就可以用该rdb文件为更多的slave排队和服务。
当使用diskless复制,一旦传输开始,再有新的slave到达将会排队,等到当前进程处理完毕,会开始一个新的传输进程。
当使用diskless复制,master在开始传输前会先等待几秒以便可能有多个slave将会到达,这样多个slave可以并行处理。
如果磁盘速度较慢但是网络速度较快,diskless复制表现更好。
slave每隔预定义的时间间隔发送ping命令到server。可以通过repl_ping_slave_period来更改这个时间间隔,默认10秒。

如果repl-disable-tcp-nodelay设置为yes,redis会使用较少数量的tcp数据包以及更少的带宽来发送数据到slave。但是这会使得slave端的数据出现至多40毫秒的延时。
如果设置为no,slave端的数据延时将会减少,但会使用更多的带宽进行复制。

设置复制积压大小。backlog是当slave有时失去连接,用来积累发送给slave的数据一个缓存,所以当一个slave想要重新连接时,通常不需要全部重新同步,
只需要部分重新同步即可,只需要传输断开连接期间slave错过的数据即可。
复制积压设置的越大,slave断开连接之后可以部分重新同步的时间就越久。
backlog只会在至少有一个slave连接的时候分配一次。
当master不再连接slave一段时间后,backlog会被释放。repl-backlog-ttl配置项指定了从最后一个slave断开连接到backlog缓存被释放所经历的时间。

8、APPEND ONLY 模式 
默认redis异步将数据转储到磁盘上。这种方式在很多应用中可以运行良好,但是redis进程异常或者断电的情况可能导致最近几分钟写入的数据丢失(取决于配置的保存时间点)。
append only file是一个可选的持久化模式,可以提供更好的持久性。例如使用默认的数据fsync策略,遇到突发事件如server断电或者操作系统仍在运行但redis本身写进程出错,redis只会丢失一秒内的写入。
aof和rdb持久化可以并存生效。如果启用了aof,redis启动时会加载aof,其实更好的持久化保证。
fsync通知操作系统实时将数据写入到磁盘,而不必等输出缓存中的更多数据。一些操作系统会实时刷新数据到磁盘,另外一些支持尝试尽可能快的去做。
appendfsync配置项,redis支持三种不同的模式:
no:不使用fsync,只是让操作系统在其想进行flush的时候将数据持久化到磁盘。速度更快。
always:每次写操作都fsync到append only log。速度慢,最安全。
everysec:每秒只fsync一次。折中方案。

9、最大内存策略

redis的配置文件中可以使用maxmory参数指定最大使用的内存大小,e.g. maxmemory 1GB 

maxmemory policy指的是当使用的内存超过设置的maxmemory时,redis如何选择应该从内存中移除的对象。redis提供了6种决策方式:

  1. volatile-lru:使用lru算法,移除已过期的key;
  2. allkeys-lru:对所有的key使用lru算法;
  3. volatile-random:随机移除已过期的key;
  4. allkeys-random:随机移除所有的key;
  5. volatile-ttl:移除最近过期时间的key;
  6. noeviction:不移除key,当写入的时候返回错误

可以通过在配置文件中设置maxmemory-policy参数来指定使用的决策,redis默认使用的是noeviction.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值