上一篇博客咱们介绍了如何安装Redis,在Redis的解压目录下有个很重要的配置文件 redis.conf (/opt/redis-4.0.9目录下),关于Redis的不少功能的配置都在此文件中完成的,在上一讲我也说过,通常为了避免破坏安装的文件,出厂默认配置最好不要去改,因此咱们将此配置文件复制到 /etc/redis/目录下了。node
经过 vim /etc/redis/redis.conf 命令打开此文件。下面咱们将详细介绍此配置文件。redis
ps:你们不懂这些配置意思不要紧,后面会在具体实例中进行介绍,先过个眼熟便可。算法
这里没什么好说的,须要注意的是后面须要使用内存大小时,能够指定单位,一般是以 k,gb,m的形式出现,而且单位不区分大小写。数据库
咱们知道Redis只有一个配置文件,若是多我的进行开发维护,那么就须要多个这样的配置文件,这时候多个配置文件就能够在此经过 include /path/to/local.conf 配置进来,而本来的 redis.conf 配置文件就做为一个总闸。vim
ps:若是用过struts2 开发的同窗,在项目组中多人开发的状况下,一般会有多个struts2.xml 文件,这时候也会经过类时的配置引入进来。缓存
另外须要注意的时,若是将此配置写在redis.conf 文件的开头,那么后面的配置会覆盖引入文件的配置,若是想以引入文件的配置为主,那么须要将 include 配置写在 redis.conf 文件的末尾。安全
redis3.0的爆炸功能是新增了集群,而redis4.0就是在3.0的基础上新增了许多功能,其中这里的 自定义模块配置就是其中之一。经过这里的 loadmodule 配置将引入自定义模块来新增一些功能。服务器
ps:这里的配置较长,我只截取了一部分,下同。网络
①、bind:绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能经过本机的客户端链接,而没法经过远程链接。若是bind选项为空的话,那会接受全部来自于可用网络接口的链接。并发
②、port:指定redis运行的端口,默认是6379。因为Redis是单线程模型,所以单机开多个Redis进程的时候会修改端口。
③、timeout:设置客户端链接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该链接。默认值为0,表示不关闭。
④、tcp-keepalive :单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,若是设置为0,则不会周期性的检测。
具体配置详解:
①、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个数据库。
这里的配置主要用来作持久化操做。
①、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 做为保存的文件名。
①、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。
①、rename-command:命令重命名,对于一些危险命令例如:
flushdb(清空数据库)
flushall(清空全部记录)
config(客户端链接后可配置服务器)
keys(客户端链接后可查看全部存在的键)
做为服务端redis-server,经常须要禁用以上命令来使得服务器更加安全,禁用的具体作法是是:
也能够保留命令可是不能轻易使用,重命名这个命令便可:
这样,重启服务器后则须要使用新命令来执行操做,不然服务器会报错unknown command。
①、maxclients :设置客户端最大并发链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件。 描述符数-32(redis server自身会使用一些),若是设置 maxclients为0 。表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息
①、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进行设置样本数。
①、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-time-limit:一个lua脚本执行的最大时间,单位为ms。默认值为5000.
①、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一直在接受写请求,而形成很长时间数据不一致。