Redis【配置文件介绍】

来源:互联网 发布:发起人肉骨茶 知乎 编辑:程序博客网 时间:2024/06/05 19:57

在玩 Redis 的时候,常常会碰 Redis 的 redis.conf 配置文件,它的作用很大,能够配置很多功能,下面我就来详细介绍下 redis.conf 文件内容。

redis.conf 文件位置

这里写图片描述

Units 单位

这里写图片描述

这里写图片描述

INCLUDES 包含

这里写图片描述

GENERAL 通用

daemonize yes

daemonize 意思为:后台运行。
如果不配置为后台运行,那么将无法部署集群

pidfile /var/run/redis.pid

管道文件配置。

port 6379

默认值/var/run/redis.pid,指定redis服务的进程号文件路径,以守护模式运行时需要配置本参数;

loglevel notice  

设置服务端的日志级别,有下列几种选择(提示详情从上到下,提示得越来越少):

  • debug:记录详细信息,用于开发或调试;
  • verbose:提供很多有用的信息,但是又不像debug那么详尽,默认就是这一选项;
  • notice:适度提醒,多用于产品环境;
  • warning:仅显示重要的警告信息;
logfile ""

指定日志的输出路径,默认值stdout,表示输出到屏幕,后台模式时则输出到/dev/null;
如果要输出日志,可以设置syslog-enabled yes,默认该选项值为no,表示不输出日志。

syslog-enabled

是否输出日志。

syslog-ident redis

日志文件名称标识。

syslog-facility local0

输出日志工具

databases 16

指定数据库的数量,默认为16个,默认使用的数据库是DB 0。

tcp-backlog 511

设置 tcp 的 backlog,backlog 其实是一个连接队列,backlog 队列总和 = 未完成三次握手队列 + 已经完成三次握手队列。
在高并发环境下你需要一个高 backlog 值来避免慢客户端连接问题。注意 Linux 内核会将这个值减小到 /proc/sys/net/core/somaxconn 的值,所以需要确认增大 somaxconn 和 tcp_max_syn_backlog 两个值来达到想要的效果。

换一个说法:

此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。

bind 127.0.0.1

指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求

timeout 0

此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。

tcp-keepalive 0

tcp keepalive参数。如果设置不为0,则不会进行 Keepalive 的检测,建议设置为 60,官方给出的建议值是300S。使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端断开的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端是否关闭。

SNAPSHOTTING 快照

save <seconds> <changes>

表示多少秒钟里,满足多少次写操作将会触发自动内存数据备份。

RDB是整个内存的压缩过的 Snapshot(快照),RDB 的数据结构,可以配置复合的快照触发条件。
默认(推荐用默认设置,这是官方最佳实践):

15 分钟内改了 1 次
5 分钟内改了 10 次
1 分钟内改了 1万次

那么如何禁用自动备份快照???

如果想禁用 RDB 持久化的策略,只要不设置任何 save 指令,或者给 save 传入一个空字符串参数。

如何进行重要数据快速备份??

直接在 控制台 打入 save 或者 bgsave 命令就可以达到动态手动备份。

stop-writes-on-bgsave-error

表示,如果在后台备份内存数据的过程中,如果发生了错误,是否停止内存数据的写入。

如果配置为 no ,表示你不在乎数据不一致或者有其它的手段发现和控制。

默认为 yes。

rdbcompression yes

使用压缩rdb文件,rdb文件压缩使用LZF压缩算法,yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间。

推荐使用压缩。

rdbchecksum yes

在存储快照后,还可以让 redis 使用 CRC64 算法来进行数据校验。从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。

推荐打开!!!

REPLICATION 复制

未完待续。。。

SECURITY 安全

获取连接密码和服务启动路径:

这里写图片描述

这里写图片描述

这里写图片描述

修改 Redis 连接密码:

这里写图片描述
这里写图片描述

LIMITS 限制

maxclients 10000

设置能连上redis的最大客户端连接数量。默认是10000个客户端连接。由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,所以maxclients最小建议设置到32。如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接。

 maxmemory <bytes>

redis配置的最大内存容量。当内存满了,需要配合maxmemory-policy策略进行处理。注意slave的输出缓冲区是不计算在maxmemory内的。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些。
所以,面试经常问到的问题是,Redis 的内存策略是怎么配置的。

maxmemory-policy noeviction

内存容量超过maxmemory后的处理策略。
volatile-lru:利用LRU(Less Recentely Use 最近很少使用)算法对设置过过期时间的最近最不经常使用的key进行删除。
volatile-random:随机移除设置过过期时间的key。
volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL),用以保存新数据
allkeys-lru:优先删除掉最近最不经常使用的任何key,用以保存新数据
allkeys-random:随机从all-keys中选择一些key进行删除,用以保存新数据。
noeviction:不移除任何key,只是返回一个写错误。
上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。redis将不再接收写请求,只接收get请求。写命令包括:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort。

maxmemory-samples

设置样本数量,LRU 算法和最小 TTL 算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小, redis 默认会检查这么多个 key 并选择其中 LRU 的那个。

APPEND ONLY MODE 追加

appendonly no

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

appendfilename "appendonly.aof"

AOF文件备份和数据加载到内存的名称。

appendfsync everysec

aof 文件备份模式。

一共有三种模式:

  • always:异步同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好。
  • everysec:出厂默认推荐,异步操作,每秒记录,如果一秒内宕机,有一秒数据丢失。
  • no:表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
no-appendfsync-on-rewrite no

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

auto-aof-rewrite-percentage 100

aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。

auto-aof-rewrite-min-size 64mb

设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。
如果是好一点的公司,这个值 3G 为起步设置,但是通常大规模应用这里设置为 6G,
当你看到你公司的 这个 值还是 64mb的 时候,你就能够知道这个公司的水平怎么样。

常见配置 redis.conf 介绍

未完待续。。。