Redis详解(二)------ redis的配置文件介绍

  上一篇博客咱们介绍了如何安装Redis,在Redis的解压目录下有个很重要的配置文件 redis.conf (/opt/redis-4.0.9目录下),关于Redis的不少功能的配置都在此文件中完成的,在上一讲我也说过,通常为了避免破坏安装的文件,出厂默认配置最好不要去改,因此咱们将此配置文件复制到 /etc/redis/目录下了。node

  经过 vim /etc/redis/redis.conf  命令打开此文件。下面咱们将详细介绍此配置文件。redis

  ps:你们不懂这些配置意思不要紧,后面会在具体实例中进行介绍,先过个眼熟便可。算法

一、开头说明

  

  这里没什么好说的,须要注意的是后面须要使用内存大小时,能够指定单位,一般是以 k,gb,m的形式出现,而且单位不区分大小写数据库

二、INCLUDES

  

  咱们知道Redis只有一个配置文件,若是多我的进行开发维护,那么就须要多个这样的配置文件,这时候多个配置文件就能够在此经过 include /path/to/local.conf 配置进来,而本来的 redis.conf 配置文件就做为一个总闸。vim

  ps:若是用过struts2 开发的同窗,在项目组中多人开发的状况下,一般会有多个struts2.xml 文件,这时候也会经过类时的配置引入进来。缓存

  另外须要注意的时,若是将此配置写在redis.conf 文件的开头,那么后面的配置会覆盖引入文件的配置,若是想以引入文件的配置为主,那么须要将 include 配置写在 redis.conf 文件的末尾。安全

三、MODULES

   

  redis3.0的爆炸功能是新增了集群,而redis4.0就是在3.0的基础上新增了许多功能,其中这里的 自定义模块配置就是其中之一。经过这里的 loadmodule 配置将引入自定义模块来新增一些功能。服务器

四、NETWORK

   

  ps:这里的配置较长,我只截取了一部分,下同。网络

  ①、bind:绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能经过本机的客户端链接,而没法经过远程链接。若是bind选项为空的话,那会接受全部来自于可用网络接口的链接。并发

  ②、port:指定redis运行的端口,默认是6379。因为Redis是单线程模型,所以单机开多个Redis进程的时候会修改端口。

  ③、timeout:设置客户端链接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该链接。默认值为0,表示不关闭。

  ④、tcp-keepalive :单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,若是设置为0,则不会周期性的检测。

五、GENERAL

   

  具体配置详解:

  ①、daemonize:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认值为 no

  ②、pidfile:配置PID文件路径,当redis做为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面

  ③、loglevel :定义日志级别。默认值为notice,有以下4种取值:

          debug(记录大量日志信息,适用于开发、测试阶段)

          verbose(较多日志信息)

          notice(适量日志信息,使用于生产环境)

          warning(仅有部分重要、关键信息才会被记录)

  ④、logfile :配置log文件地址,默认打印在命令行终端的窗口上

  ⑤、databases:设置数据库的数目。默认的数据库是DB 0 ,能够在每一个链接上使用select  <dbid> 命令选择一个不一样的数据库,dbid是一个介于0到databases - 1 之间的数值。默认值是 16,也就是说默认Redis有16个数据库。

六、SNAPSHOTTING

  这里的配置主要用来作持久化操做。

  

  ①、save:这里是用来配置触发 Redis的持久化条件,也就是何时将内存中的数据保存到硬盘。默认以下配置:

save 900 1:表示900 秒内若是至少有 1 个 key 的值变化,则保存
save 300 10:表示300 秒内若是至少有 10 个 key 的值变化,则保存
save 60 10000:表示60 秒内若是至少有 10000 个 key 的值变化,则保存

    固然若是你只是用Redis的缓存功能,不须要持久化,那么你能够注释掉全部的 save 行来停用保存功能。能够直接一个空字符串来实现停用:save ""

  ②、stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否中止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,不然没有人会注意到灾难(disaster)发生了。若是Redis重启了,那么又能够从新开始接收数据了

  ③、rdbcompression ;默认值是yes。对于存储到磁盘中的快照,能够设置是否进行压缩存储。若是是的话,redis会采用LZF算法进行压缩。若是你不想消耗CPU来进行压缩的话,能够设置为关闭此功能,可是存储在磁盘上的快照会比较大。

  ④、rdbchecksum :默认值是yes。在存储快照后,咱们还可让redis使用CRC64算法来进行数据校验,可是这样作会增长大约10%的性能消耗,若是但愿获取到最大的性能提高,能够关闭此功能。

  ⑤、dbfilename :设置快照的文件名,默认是 dump.rdb

  ⑥、dir:设置快照文件的存放路径,这个配置项必定是个目录,而不能是文件名。使用上面的 dbfilename 做为保存的文件名。

七、REPLICATION

  

  ①、slave-serve-stale-data:默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:

      1) 若是为 yes ,slave 仍然会应答客户端请求,但返回的数据多是过期,或者数据多是空的在第一次同步的时候 

      2) 若是为 no ,在你执行除了 info he salveof 以外的其余命令时,slave 都将返回一个 "SYNC with master in progress" 的错误

  ②、slave-read-only:配置Redis的Slave实例是否接受写操做,即Slave是否为只读Redis。默认值为yes。

  ③、repl-diskless-sync:主从数据复制是否使用无硬盘复制功能。默认值为no。

  ④、repl-diskless-sync-delay:当启用无硬盘备份,服务器等待一段时间后才会经过套接字向从站传送RDB文件,这个等待时间是可配置的。  这一点很重要,由于一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。所以服务器等待一段  时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会当即启动。默认值为5。

  ⑤、repl-disable-tcp-nodelay:同步以后是否禁用从站上的TCP_NODELAY 若是你选择yes,redis会使用较少许的TCP包和带宽向从站发送数据。但这会致使在从站增长一点数据的延时。  Linux内核默认配置状况下最多40毫秒的延时。若是选择no,从站的数据延时不会那么多,但备份须要的带宽相对较多。默认状况下咱们将潜在因素优化,但在高负载状况下或者在主从站都跳的状况下,把它切换为yes是个好主意。默认值为no。

八、SECURITY

  

  ①、rename-command:命令重命名,对于一些危险命令例如:

    flushdb(清空数据库)

    flushall(清空全部记录)

    config(客户端链接后可配置服务器)

    keys(客户端链接后可查看全部存在的键)                   

  做为服务端redis-server,经常须要禁用以上命令来使得服务器更加安全,禁用的具体作法是是:

  • rename-command FLUSHALL ""

也能够保留命令可是不能轻易使用,重命名这个命令便可:

  • rename-command FLUSHALL abcdefg

  这样,重启服务器后则须要使用新命令来执行操做,不然服务器会报错unknown command。

九、CLIENTS

  

  ①、maxclients :设置客户端最大并发链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件。  描述符数-32(redis server自身会使用一些),若是设置 maxclients为0 。表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息

十、MEMORY MANAGEMENT

  

  ①、maxmemory:设置客户端最大并发链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件。描述符数-32(redis server自身会使用一些),若是设置 maxclients为0 。表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息。

  ②、maxmemory-policy :当内存使用达到最大值时,redis使用的清楚策略。有如下几种能够选择:

    1)volatile-lru   利用LRU算法移除设置过过时时间的key (LRU:最近使用 Least Recently Used ) 

    2)allkeys-lru   利用LRU算法移除任何key 

    3)volatile-random 移除设置过过时时间的随机key 

    4)allkeys-random  移除随机ke

    5)volatile-ttl   移除即将过时的key(minor TTL) 

    6)noeviction  noeviction   不移除任何key,只是返回一个写错误 ,默认选项

   ③、maxmemory-samples :LRU 和 minimal TTL 算法都不是精准的算法,可是相对精确的算法(为了节省内存)。随意你能够选择样本大小进行检,redis默认选择3个样本进行检测,你能够经过maxmemory-samples进行设置样本数。

十一、APPEND ONLY MODE

  

  ①、appendonly:默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。可是redis若是中途宕机,会致使可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另外一种持久化方式,  能够提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。默认值为no。

  ②、appendfilename :aof文件名,默认是"appendonly.aof"

  ③、appendfsync:aof持久化策略的配置;no表示不执行fsync,由操做系统保证数据同步到磁盘,速度最快;always表示每次写入都执行fsync,以保证数据同步到磁盘;everysec表示每秒执行一次fsync,可能会致使丢失这1s数据

  ④、no-appendfsync-on-rewrite:在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来讲,执行fsync会形成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。若是对延迟要求很高的应用,这个字段能够设置为yes,不然仍是设置为no,这样对持久化特性来讲这是更安全的选择。   设置为yes表示rewrite期间对新写操做不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据。默认值为no。

  ⑤、auto-aof-rewrite-percentage:默认值为100。aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增加到必定大小的时候,Redis可以调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上第二天志重写获得AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。

  ⑥、auto-aof-rewrite-min-size:64mb。设置容许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的状况还要重写。

  ⑦、aof-load-truncated:aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操做系统宕机后,尤为在ext4文件系统没有加上data=ordered选项,出现这种现象  redis宕机或者异常终止不会形成尾部不完整现象,能够选择让redis退出,或者导入尽量多的数据。若是选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端而后load。若是是no,用户必须手动redis-check-aof修复AOF文件才能够。默认值为 yes。

十二、LUA SCRIPTING

  

  ①、lua-time-limit:一个lua脚本执行的最大时间,单位为ms。默认值为5000.

1三、REDIS CLUSTER

  

  ①、cluster-enabled:集群开关,默认是不开启集群模式。

  ②、cluster-config-file:集群配置文件的名称,每一个节点都有一个集群相关的配置文件,持久化保存集群的信息。 这个文件并不须要手动配置,这个配置文件有Redis生成并更新,每一个Redis集群节点须要一个单独的配置文件。请确保与实例运行的系统中配置文件名称不冲突。默认配置为nodes-6379.conf。

  ③、cluster-node-timeout :能够配置值为15000。节点互连超时的阀值,集群节点超时毫秒数

  ④、cluster-slave-validity-factor :能够配置值为10。在进行故障转移的时候,所有slave都会请求申请为master,可是有些slave可能与master断开链接一段时间了,  致使数据过于陈旧,这样的slave不该该被提高为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开链接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period     若是节点超时时间为三十秒, 而且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即若是超过310秒slave将不会尝试进行故障转移

  ⑤、cluster-migration-barrier :能够配置值为1。master的slave数量大于该值,slave才能迁移到其余孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工做的从节点时,它的一个从节点会尝试迁移。

  ⑥、cluster-require-full-coverage:默认状况下,集群所有的slot有节点负责,集群状态才为ok,才能提供服务。  设置为no,能够在slot没有所有分配的时候提供服务。不建议打开该配置,这样会形成分区的时候,小分区的master一直在接受写请求,而形成很长时间数据不一致。

相关文章
相关标签/搜索