Redis配置文件
自定义目录 /myreids/redis.conf
Units 单位
配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit。大小写不敏感
INCLUDES 包含
多实例的情况可以把公用的配置文件提取出来
网络配置相关
bind
默认情况 bind=127.0.0.1 只能接受本机的请求访问
不写的情况下,无限制接受任何ip地址的访问
服务器是需要远程访问的,所以需要将其注释掉
如果开启了protected-mode,那么在没有设定 bind ip且没有设密码的情况下,Redis只允许接受本机的响应
保存配置,停止服务,重新启动查看进程,不再是本机的访问了
protected-mode
将本机访问模式设置为 no
Port
端口好,默认为 6379
tcp-backlog
设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列+已完成三次握手队列
在高并发环境下你需要一个高backlog值来避免慢客户端连接问题
注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值(128),所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果
timeout
一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭
tcp-keepalive
对访问客户端的一种心跳检测,每隔n秒检测一次
单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置为60
unixsocket/tmp/redis.sock
unix指定监听socket,指定用来监听连接的unix套接字路径。没有默认值,不指定的话Redis不会通过unix套接字来监听
unixsocketperm 755
当只当监听为socket时,可以指定其权限为755
GENERAL 通用
daemonize
是否为后台进程,设置为yes
守护进程,后台启动
pidfile
存放pid文件的位置,每个实列会产生一个不同的pid文件
loglevel
指定日志记录级别,Redis共支持四个级别:debug、verbose、notice、warning,默认notice
四个级别根据使用阶段来选择,生产环境一般选择notice或者warning
logfile (stdout)
日志文件名称。也可使用”stdout“强制让Redis吧日志写到标准输出上;如果Redis是以守护进程方式运行时,设置日志显示到标准输出的话,日志会发送到/dev/null
databases 16
设定库的数量, 默认是16, 默认使用数据库为0。可以使用 SELECT WHERE dbid(0~’databases’- 1) 命令在连接上指定数据库id
syslog-enable no
使用系统日志记录器,只要设置”syslog-enable“ 为 ”yes”即可
syslog-ident redis
指明syslog身份
syslog-facility local0
指明syslog的设备,必须时一个用户或者是 LOCAL0 ~ LOCAL 7之一
SECURITY 安全
设置密码
requirepass foobared
访问密码的查看、设置和取消
在命令中设置新密码,只是临时的。重启redis服务器,密码就还原了
永久设置,需要在配置文件中进行设置
Aredis:0>config get requirepass
1) "requirepass"
2) "123456"
Aredis:0>config set requirepass "111111"
"OK"
Aredis:0>config get requirepass
1) "requirepass"
2) "111111"
rename-command CONFIG
命令重命名
在共享环境下,可以为危险命令改变名字
LIMITS 限制
maxclients
设置redis同时可以与多个少个客户端进行连接
默认情况下为10000个
如果达到了此限制,redis则会拒绝新的请求连接,并且向这些连接请求方发出 “max number of clients reached” 以作回应
maxmemory
必须设置,否则将内存占满,造成服务器宕机
设置 redis可以使用的内存量。一旦达到内存使用上限,redis将会视图移除内部数据,移除规则可以通过maxmemory-policy指定
如果redis无法根据移除规则来移除内存中的数据,或设置了 不允许移除,那么redis则会针对那些需要社情内存的指令返回错误信息, 如SET、LPUSH 等
但是对于无内存申请的指令,仍会正常响应,比如GET等。如redis是主机(说明有从机),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有设置的是 ”不移除“的情况下,才不用考虑这个因素
maxmemory-policy
-
volatile-lru:使用LRU算法移除key,只对设置了过期时间的key
-
allkeys-lru:在所有集合key中,使用LRU算法移除key
-
volatile-random:在过期集合中移除随机的key,只对设置了过期时间的key
-
allkeys-random:在所有集合key中,移除随机的key
-
volatile-ttl:移除TTL值最小的key,即临近过期的key
-
noeviction:不进行移除。针对写操作,只返回错误信息
maxmemory-samples
设置样本数量,LRU算法和最小TTL算法都并非精确算法,而是估算值,所以可以可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个
一般设置3到7的数字,数值越小越不准确,但性能消耗越小
LRU
LRU(Least recently used, 最近最少使用),其核心思想是:如果一个数据最近一段时间被访问过,那么以后被访问的几率越高,如果一个数据最近一段时间没有被访问过,那么将来被访问的几率越小;当内存超过限制时,应当把最久没有访问的数据淘汰。
TTL
IP头部有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值,但不是具体的时间,而是存储了一个IP数据报可以经过的最大路由数,每经过一个路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。
纯累加模式
appendonly no
默认情况下,Redis是异步的把数据导出到磁盘上。这种情况下,Redis挂掉的时候,最新的数据就丢了
如果不希望丢掉任何数据则使用纯累加模式:Redis每次写入的数据在接收后都写入appendonly.aof文件
appendonly.aof文件
每次启动后,Redis都会把这个文件的数据读入内存里
异步导出的数据库文件和纯累加文件可以并存(需要把save 设置都注释掉,关闭导出机制)
如果纯累加模式开启,那么Redis会在启动时载入日志文件而忽略导出的dump.rdb文件
appendfilename appendonly.aof
纯累加模式的文件名
appendfsync always
appendfsync everysec
appendfsync no
fsync 请求操作系统立即把数据写入到磁盘
- no 不立即写入
- always 每次写操作都立即写入aof文件 (慢, 安全)
- everysec 每秒写一次 (默认)
auto-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
自动重写AOF文件
达到AOF日志文件指定大小的百分比,Redis能通过BGREWRITEAOF 自动重写AOF文件
指定被重写日志的最小尺寸,这样避免达到最大百分比但尺寸很小还要重写的情况
快照
save
save 900 1
save 300 10
save 60 10000
把数据保存的磁盘上 save ,会在指定秒数和数据变化次数后把数据写到磁盘上
rdbcompression yes
导出的.rdb文件时是否采用LZF压缩
dbfilename dump.rdb
数据库的文件名
dir ./
工作目录,数据库会写到这个目录下,文件名时上面的 dbfilename
同步
slaveof
主从同步。通过slaveof配置来实现Redis实例的备份
masterauth
如果设置了密码,那么slave在开始同步之前必须进行身份验证,否则它的同步请求会被拒绝
slave-server-stale-data yes
当一个slave和master失去连接,或者同步正在进行,slave的行为有两种可能:
- 如果 slave-server-stale-data 设置为 yes,slave会继续响应客户端的请求,可能是正常数据,也可能是还没获得值的空数据
- 如果 slave-server-stale-data 设置为no, slave会回复“ 正在从Master同步 (SYNC with master in progress)来处理各种请求,除了INFO 和 SLAVEOF 命令
repl-ping-slave-period 10
slave根据只当的时间间隔向服务器发送ping请求
时间间隔通过 repl-ping-slave-period设置, 默认为 10
repl-timeout60
设置大块数据I/O、向Master请求数据和额ping响应的过期时间, 默认60秒
确保这个值比repl-ping-slave-period大, 否则 master和slave之间的传输过期时间比预想的要短
慢查询日志
可以为慢查询日志配置两个参数:
一是超标时间,单位为微妙
另一个是慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删除
slowlog-log-slower-than 10000
Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种 I/O时间
slow-max-len 128
这个长度没有限制,只要有足够的内存。可以通过SLOWLOG RESET 来释放内存
高级配置
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
当有大量数据时,适合用哈希编码(需要更多的内存),元素数量上限不能超过给定的限制
可以通过下面选项来设定这些限制
list-max-ziplist-entries 512
list-max-ziplist-value 64
与哈希类似,数据元素较少的情况下,可以用另一种方式来编码从而节省大量空间
这种方式只有符合下面限制才可以使用
set-max-intset-entries 512
还有一种特殊编码情况:数据全是64为无符号整型数字构成的字符串
下面这个配置项就是用来限制这种情况下使用这种编码的最大上限的。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
与第一、第二种情况相似,有序序列也可以使用一种特别的编码方式来处理, 可以节省大量空间
这种编码知识和长度和元素都符合下面限制的有序序列:
activerehashing yes
哈希刷新,每100个cpu毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)
redis所用的哈希表实现采用延迟哈希刷新机制:对一个哈希表操作越多,哈希刷新操作就越频繁;反之,如果服务器非常不活跃那么就是使用内存保存哈希表
默认是每秒进行10此哈希表刷新,用来刷新字典,然后尽快释放内存
如果对延迟比较在意的话 使用 “activerehashing no”, 每个请求延迟2毫秒
如果希望尽快释放内存 使用 “activerehashing yes”
客户端输出缓存限制
客户端输出缓存限制轻质断开读取速度比较慢的客户端
三种限制类型
normal -> 正常的客户端包括监控客户端
slave -> 从客户端
pubsub -> 客户端至少订阅了一个频道或者模式
客户端输出缓存限制语法 client-output-buffer-limit <类别><强制限制><软性限制><软性时间>
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
- 达到强制限制缓存大小,立即断开链接
- 达到软性限制,仍然会有软性时间大小的链接时间
- 默认正常客户端无限制,只是请求后,异步客户端数据请求速度快于它能读取数据的速度
- 订阅模式和主从客户端有默认限制,因为他们都接受推送
- 强制限制和软性限制都可以设置为0来禁用
hz 10
设置Redis后台任务执行频率,比如清除过期键任务
设置范围 1到 500,默认10,越大越消耗CPU,延迟越小
建议不超过100
aof-rewrite-incremental-fsync yes
当子进程重写AOF文件,以下选项开启时,AOF文件会每产生32M数据同步一次(有助于更快写入文件到磁盘避免延迟)
包含
include /path/to/local.conf
include /path/to/other.conf
包含一个或多个其它配置文件