Redis脚本简介
在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server 、redis-cli 、redis-benchmark 、redis-stat 、redis-check-dump、redis-check-aof :
redis-server:Redis服务器的daemon启动程序。
redis-cli:Redis命令行执行工具。当然,你也可以用telnet根据其纯文本协议来操作。
redis-benchmark:Redis性能检测工具,测试Redis在你的系统及你的配置下的读写性能。
redis-stat:Redis态检测工具,可以检测 Redis 当前状态参数及延迟状况(高版本的Redis将没有这个脚本)。
redis-check-dump:Redis dump 数据文件的修复工具。
redis-check-aof:Redis aof 日志文件修复工具。
Redis配置文件详解
开头说明

开头说明中主要就是要注意在redis中内存大小写k
和kb
是不一样的,前者是1000的倍数,后者超时1024的倍数。
INCLUDES

INCLUDES
的作用就是把其他关于redis的配置文件引入到redis.conf文件中使其生效,redis.conf就作为一个总闸一样,配置的方法是使用include
来引入一个路径下配置文件(比如:include /path/aaa/other.conf
)。 需要注意的是,如果将此配置写在redis.conf 文件的开头,那么后面的配置会覆盖引入文件的配置,如果想以引入文件的配置为主,那么需要将 include 配置写在 redis.conf 文件的末尾。
MODULES

NETWORK


bind
: 绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind被注掉了或者为空时会接收所有来自于可用网络的连接。port
: 指定redis运行的端口,默认的是6379
。由于redis是单线程模型,因此单机开多个redis运行的时候会修改端口,除此而外一般保持默认的即可。protected-mode
:是否开启保护模式,默认是yes
表示开启保护模式timeout
:设置客户端连接时的超时时间,单位:秒。当客户端在这段时间没有任何操作(空闲的),那么就会关闭连接。默认为0,表示永不关闭。tcp-backlog
: 此参数确定了TCP连接中已完成的队列长度,这个值必须不能大于Linux系统中定义的/proc/sys/net/core/somaxconn值,默认是511。tcp-keepalive
:表示将周期性的使用SO_KEEPALIVE
检测客户端是否还处于健康状态,避免服务器一直阻塞,官方默认是300s,如果设置为0,表示不周期性检测。
GENERAL

daemonize
:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认为nopidfile
:配置pid文件路径,当Redis作为守护进程运行的时候,会把pid默认写到/var/redis/run/redis_6379.pid
文件里面loglevel
:定义日志级别。默认为notice。Redis中有4中日志级别:debug
:记录详细的日志,使用与开发、测试阶段varbose
:较多的日志notice
:适量的日志信息,适用于生产环境warning
:仅有部分重要、关键的才会被记录
logfile
:配置日志文件默认存放的位置,默认会直接打印在终端的屏幕上databases
:设置数据库的数目。默认的数据库是DB0,有16个,可以使用select <dbid>
命令选择不同的数据库。always-show-logo
:是否在启动的时候显示Redis的logo,默认为yes,即显示logo。
SNAPSHOTTING


-
save
:用来配置触发Redis的做持久化的条件,也就是什么时候将内存中的数据保存到硬盘中。默认配置如下: *save 900 1
:表示900s内如果有1个key变化,到时间(900s)后就把这段时间内的变化保存到磁盘 *save 300 10
表示300s内如果有10个key变化,到时间(300s)后就把这段时间内的变化保存到磁盘 *save 60 10000
表示60s内如果有10000个key变化,到时间(60s)后就把这段时间内的变化保存到磁盘当然如果只是使用Redis的缓存功能,不需要持久化,那么可以把这些save注释掉,然后使用一个空字符串实现停用:
save ""
-
stop-writes-on-bgsave-error
:当启用了RDB且最火一次后台保存数据失败,Redsi是否停止接收数据。默认值为yes,这会让用户意识到数据没有正确持久化到硬盘上,从而可以排错,否者没有人会注意到灾难发生了。 rdbcompression
:对于存储到磁盘中的快照,可以设置时候惊进行压缩存储。默认值是yes,redis会使用LZF
算法进行压缩。但是压缩会带来一定的CPU消耗,如果关闭后存储在磁盘上的快照将会非常大。rdbchecksum
:在存储快照后,我们还可以让Redis使用CRC64算法来进行数据校验。默认是yes,这样会带来10%的性能消耗。dbfilename
:设置快照的文件名,默认名字是dump.rdb
。dir
:设置快照文件的存放路径,这个配置项必须自定的是一个目录,而不能是一个文件名。保存的是上面dbfilename,默认保存到当前目录下。
REPLICATION

slave-serve-stale-data
:当一个slave和一个master失去联系,或者复正在进行的时候,slave可能会有两种表现: * 如果是yes,slave任然会应答客户端请求,但是返回的数据是过时的。 * 如果是no,在执行除了info he salvaof之外的其他命令时,slave都将返回一个“SYNC with master in progress”错误slave-read-only
:配置Redis的Slave示例是否接受写操作,即Slave是否为只读Redis。默认值是yes,Slave为只读。repl-diskless-sync
:主从复制是否使用无硬盘复制功能。默认值为no。repl-disless-sync-delay
:当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。repl-disalbe-tcp-nodelay
:同步之后是否禁用从站上TCP_NODELAY。如果yes,表示redis会使用较少的TCP包和带宽向从站发送数据。但是这回导致从站增加数据延时;如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。Redis默认设置是no。
SECURITY

rename-command
:从命名命令。例如对于一些危险的命令: *flushdb
:清空当前数据库 *flushall
:清空所有数据库 *config
:客户端连接后可配置服务器 *keys
:查看数据库中所有的键requirepass
:设置Redis连接密码,如果配置了连接密码,客户端在连接Redis的时候需要通过auth <password>
命令来验证。默认是关闭的。
作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是:(比如禁用FLUSHALL命令): * rename-command FLUSHALL ""
也可以保留这个命令但是把它重命名,一般人没有权限使用: * rename-command FLUSHALL sfr443g432
这样,重启服务器后则需要使用新命令来执行操作,否则服务器会报错unknown command。
CLIENTS

maxclients
:设置客户端最大的连接数,默认是10000个连接。当客户端连接数到达限制是,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。如果设置为0,表示不作限制。
MEMORY MANAGEMENT

maxmemory
:指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区maxmemory-policy
:当内存使用达到最大值时,redis应该采用的内存清理策略。有以下几种可以选择:volatile-lru
:从所有配置了过期时间的键中移除最近很少使用的键allkeys-lru
:从所有键中移除任何最近很少使用过的键volatile-lfu
:从所有配置了过期时间的键中驱逐使用频率最少的键allkeys-lfu
: 从所有键中驱逐使用频率最少的键volatile-random
:随机移除设置了过期时间的keyallkeys-random
:随机移除任何keyvolatile-ttl
:移除距过期时间最近的keynoeviction
:不移除任何key,仅仅返回写错误,默认值。
APPEND ONLY MODE

appendonly
:默认redis使用的是RDB方式持久化,这种方式在许多应用中已经足够用了。但是对于数据一致性要求很高的应用,如果还是只使用RDB,一旦redis宕机,会导致可能有几分钟的数据丢失,这种场景下就需要使用AOF(另一种持久化方式),可以提供更好的持久化特性以及更高的数据一致性。将appendonly置为yes开启AOF,Redis将会把每次写入的数据在接收后都写入appendonly.aof文件(默认的文件名),每次启动的时候会优先加载appendonly.aof这个文件到内存中。默认值是no。appendfilename
:aof文件的默认文件名,默认值是appendonly.aof
appendfsync
:aof持久化化策略配置。有三个值可以选: *no
:不执行fsync,有操作系统保证数据同步到磁盘,速度最快 *always
:每次写入都执行fsync,以保证数据同步到磁盘,速度最慢 *everysec
:每秒执行一次fsync,这样aof就可能会对时1s的数据 (默认值,通常来说能在速度和数据安全性之间取得比较好的平衡。)no-appendfsync-on-rewirite
:如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。
auto-aof-rewrite-percentage
: aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。默认值是100auto-aof-rewrite-min-size
:AOF文件到达重写的阈值,避免了达到约定百分比但尺寸仍然很小的情况还要重写,默认64m,这点内存啥都干不了,一般设置都是以GB为单位。aof-load-truncated
:如果设置为yes,如果一个因异常被截断的AOF文件被redis启动时加载进内存,redis将会发送日志通知用户;如果设置为no,erdis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件。
LUA SCRIPTING

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

cluster-enable
:是否开启集群,默认是不开启的。cluster-config-file
:集群配置文件名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件不需要手动配置,它由redis生成并更新。默认配置为nodes-6379.confcluster-node-timeout
:可以设置值为15000。节点互连超时的阈值,集群节点超时毫秒数。cluster-slave-validity-factor
:在进行故障转移的时候,全部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
:master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。cluster-require-full-coverage
:默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。 设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。