Redis配置文件详解
redis关于内存分配使用的单位,不区分大小写,K、M、G单位进制1000,kb,mb,gb进制1024
配置项:#include .\path\to\local.conf
一般的一台服务器上会跑多个Redis实例,而这些实例配置大同小异,因此将共同的部分抽取出来template.conf,然后在其他配置(Instance.conf)中引入是一种合理的实践方式,Redis配置支持这种实践模式,通过include指令,除此以外,在Instance.conf 覆盖参数也是合理的需求。
配置项:#bind 127.0.0.1
如果bind参数没有定义, redis将会监听服务器的所有的IP(一般服务器有多个网卡)
警告:在生产环境中(或者说在公网)监听全部的IP是极度危险的,所以默认的,Redis设定之间听回环IP(127.0.0.1),这样Redis只会处理来自本机的连接。如果 你确认需要监听本机全部的IP,请注释掉bind 配置
配置项:protected-mode yes
用于设定是否开启保护模式,默认开启。
当Redis暴露在互联网,没有设定具体的监听IP,也没有开启访问的密码验证:如果开启保护模式,那么Redis只会接受来自本机(本机回环地址)以及Unix Domain Socket(也是本机)的连接,
配置项:port 6379
Redis监听的TCP端口 ,用于客户端连接,必须设定为大于0,且要避开系统端口
配置项:tcp-backlog 511
基本上就是用于指定Redis可同时维持的最大的通信进程数,但是这个进程数不能超过Linux系统的默认设定值,一般不需要设定
配置项:timeout 0
设定Redis与客户端断开连接后与Redis关闭这个连接的时间差,0代表No
配置项:tcp-keepalive 0
TCP keepalive.单位second 一般60秒
用于设定Redis向客户端发出心跳检测的间隔时间,目的有两个:一个是心跳检测,一个是保证网络畅通(网络中间设备可能会掐断链路)
配置项:daemonize no
设定是否在以守护进程的模式运行,默认No,当开启后会在写一个/var/run/redis.pid 记录pid
配置项:supervised no
如果使用 upstart or systemd 做服务的监控,可以配置这个选项用于发送信号给两者
可用选项:
选项 | 描述 |
---|---|
supervised no | no supervision interaction |
supervised upstart | signal upstart by putting Redis into SIGSTOP mode |
supervised systemd | signal systemd by writing READY=1 to $NOTIFY_SOCKET |
supervised auto | supervised auto |
配置项:databases 16
设定 redis 分区数量,一般在多个应用使用一个群组的时候需要为不同应用分配不同空间避免Key冲突
配置项:loglevel notice
设定Redis 日志的级别
配置项:logfile ""
设定日输出文件名,不设定日志输出会被重定向到标准输出流
配置项:# Save the DB on disk:
- save 900 1
- save 300 10
- save 60 10000
设定写入到磁盘的时机,要同时满足两条件 时间(单位seconds)、key的更改次数
如果不需要写到磁盘 用save "" 覆写
配置项:stop-writes-on-bgsave-error yes
如果开启了快照而最新的快照又失败的话,Redis将拒绝写入操作,以避免灾难发生,尽管这是很硬核的策略
如果Redis 后台写快照又正常了,Redis则会自动的允许写入
如果你设定正确的监控和持久化策略。你可以关闭这个特性(use no),即使硬盘坏了或者写出权限不足
配置项:rdbcompression yes
在Redis 把内存中的数据dump到硬盘上的rdb文件时,是否使用LZF算法对string 进行压缩,开启压缩的话,文件会变小,但是CPU小号功率会上升,默认开启。
配置项:rdbchecksum yes
从第5个发布的版本开始,Redis增加了在RDB文件的介未增加了CRC64的完整性校验位,防止文件被破坏。但是在存储的时候会降低大约10%的效率。默认yes开启no关闭
配置项:dbfilename dump.rdb
设定mem数据dump到硬盘时的文件名 (Snapshot)
配置项:dir ./
设定文件的存储目录 绝对路径或者相对路径均可以 只可以是文件夹:dafilename文件会存储在这个目录下
配置项:# requirepass foobared
是否需要开启密码验证(一般情况下,并不需要),Redis 性能相当高,大约每秒处理大约150k请求,因此密码最好很长,不然直接就暴力破解了
配置项:# maxclients 10000
设定Redis同时最大的客户端连接数量,默认情况为10000,如果Redis无法从配置文件进行配置,Redis将会设定为当前文件的限制减去32;
配置项:# persistence-available [(yes)|no]
是否开启持久化机制,如果否,那么一切持久化相关配置都会失效。比如RDB(内存数据快照)&AOF(操作记录AppendOnlyFile)
配置项:# maxmemory
<bytes>
当内存使用量达到设定的上限时,Redis就会开始回收过期的Key.
如果无法删除key,Redis会对使用大量内存的命令(lpush等)返回错误信息,但是GET类命令正常响应。
除此之外,如果当前Redis有备机存在,那么写到备机时所可使用的最大缓存大小为机器内存减去Redis数据所占内存。因此,当数据过多时就会挤压主从缓冲的大小,直至缓冲被挤占完全,当网络有问题时,会造成同步失败,简单的说,当有备机存在时,maxmemory需要设置的小点给主从复制缓冲留些空间
配置项:# maxmemory-policy noeviction
内存用尽时的Key删除策略,共5种
volatile-lru -> 删除 Least Recent Use 算法& Has Expried Keys
allkeys-lru ->删除 Least Recent Use 算法 & Any Keys
volatile-random -> 随机删除A Has Expried Key
allkeys-random -> 随机删除A Key
volatile-ttl -> 删除距离过期时间最近的Key
noeviction -> 不做任何处理,当达到maxmemory时,直接return an error to client
配置项:# maxmemory-samples 5
LRU或者TTL并不是精确算法,可以对算法进行调整,默认的,LRU或者TTL 每次会选择5个Key检测,随机的删除满足条件一个。不需要修改,5 is tested for the best performance
配置项:
- appendonly no
- appendfilename "appendonly.aof"
默认情况下,Redis dump data to disk 和接受读写的线程是异步的,这种模式在大部分情况下足够用了,但是如果突然停电关机,一般情况下,Mem内的数据 会丢失一部分(不确定的)。
AOF 模式提供了更可靠的持久化方式,使用fsync 策略时,Redis只会丢失1s的写入数据(取决于appendfsync 配置)。
AOF 和RDB 可以同时启用,但是会优先使用AOF
配置项:
- #appendfsync always
- appendfsync everysec
- appendfsync no
Redsi调用fsync()时,会告诉系统立刻把数据的从内存写入到 硬盘而不是停留在在输出buffer里面。(但是取决于系统,linux下是如此)
Redis 调用 fsync()模式有如下几种:
- no,不调用,让系统决定;
- always 每一次写操做都会调用
- everysec每秒调用一次,默认值
配置项:no-appendfsync-on-rewrite no
当AOF fsync 为always 或者 everysec,同时在后台有进程在进行大量的磁盘IO(比如BGSAVE或者AOF重写时),在一些Linux配置中Redis会长时间的阻塞在fsync调用上(目前还没有办法解决),甚至至其他线程调用也会阻塞我们对write(2)的调用(因为Redis Main Thread调用write是同步阻塞的)为了减少这个问题请使用如下的配置,以阻止主线程对fsync的调用(当有BGSAVE或者BGREWRITEAOF执行的时候)这样有一个后果,AOF文件从内存写入到硬盘完全由系统控制即appendfsync 为no的效果一样,最坏的情况下,AOF会丢失30s的数据
如果你对读写效率要求非常高时,请将下面的配置为yes,不然请保持no,这样是数据最安全的
配置项:
- auto-aof-rewrite-min-size 配置 重写的触发时最小的AOF大小
- #auto-aof-rewrite-percentage 配置当AOF文件相比于Redis启动时大小增长的比率,0代表禁用BGAOFREWRITE特性
AOF 持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大;
影响包括但不限于:对于Redis服务器,计算机的存储压力;AOF还原出数据库状态的时间增加;
为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:
Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。(主要是合并一些命令)
这个机制触发机制是:当AOF文件大小的增长到某一个值时;
配置项:aof-load-truncated yes
在Redis启动时,AOF文件被载入内存,有可能持续出现(AOF被截断文件不完整这种情况,一般是系统挂掉造成的尤其是EXT4这种文件系统),Redis根据如下的aof-load-truncated的配置要么直接报错退出,要么尽可能的载入可载入的数据。
aof-load-truncated yes 时,Redis会正常启动并尽可能的载入数据,并将AOF损坏报告给用户
aof-load-truncated no时,Redis将会因为报错而退出,需要使用redis-check-aof来修复AOF文件后再次启动。
注意,这个选项只对AOF文件结尾损坏有效,如果AOF文件中间损坏了并不会由任何效果Redis人仍旧会退出报错。