Redis教程(十) Redis配置文件详解

来源:互联网 发布:win7网络设置新功能 编辑:程序博客网 时间:2024/05/22 07:07

 

Redis教程() Redis配置文件详解

 


1 Redis配置详解

Redis中直接启动redis-server服务时,采用的是默认的配置文件。修改redis.conf配置文件可以按照指定的配置文件来运行Redis服务。

 

1.1 Redis配置参数表

属性

说明

daemonize no

# 默认值no,该参数用于定制redis服务是否以守护模式运行。

pidfile /var/run/redis.pid

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

port 6379

# 默认值6379,指定redis服务的端口

tcp-backlog 511

# 在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志

timeout 0

设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

# 0是关闭此设置

tcp-keepalive 0

# TCP keepalive

Linux上,指定值(秒)用于发送 ACKs的时间。注意关闭连接需要双倍的时间。默认为 0

loglevel notice

指定日志记录级别,生产环境推荐 notice

# Redis总共支持四个级别: debugverbosenoticewarning,默认为 verbose

# debug    记录很多信息,用于开发和测试

# varbose  有用的信息,不像 debug会记录那么多

# notice   普通的 verbose,常用于生产环境

# warning  只有非常重要或者严重的信息会记录到日志

logfile ""

配置 log文件地址

默认值为 stdout,标准输出,若后台模式会输出到 /dev/null

databases 16

# 可用数据库数,默认值为 16,默认数据库为 0,数据库范围在 0- database-1)之间

快照

stop-writes-on-bgsave-error yes

保存数据到磁盘,格式如下 :

#  save <seconds> <changes>

指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb

相当于条件触发抓取快照,这个可以多个条件配合

比如默认配置文件中的设置,就设置了三个条件

#   save 900 1  900秒内至少有 1 key被改变

#   save 300 10  300秒内至少有 300 key被改变

#   save 60 10000  60秒内至少有 10000 key被改变

#   save 900 1

#   save 300 10

#   save 60 10000

 

stop-writes-on-bgsave-error yes

后台存储错误停止写。

rdbcompression yes

存储至本地数据库时(持久化到 rdb文件)是否压缩数据,默认为 yes

rdbchecksum yes

#  RDB文件的是否直接偶像 chcksum

dbfilename dump.rdb

本地持久化数据库文件名,默认值为 dump.rdb

dir /var/lib/redis-server/

工作目录

数据库镜像备份的文件放置的路径。

这里的路径跟文件名要分开配置是因为 redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成,

再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。

# AOF文件也会存放在这个目录下面

注意这里必须制定一个目录而不是文件

slave-serve-stale-data yes

主从复制 .设置该数据库为其他数据库的从数据库 .

设置当本机为 slav服务时,设置 master服务的 IP地址及端口,在 Redis启动时,它会自动从 master进行数据同步

# slaveof <masterip><masterport>

master服务设置了密码保护时 ( requirepass制定的密码 )

# slave服务连接 master的密码

# masterauth <master-password>

当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:

# 1) 如果 slave-serve-stale-data设置为 yes(默认设置 ),从库会继续响应客户端的请求

# 2) 如果 slave-serve-stale-data是指为 no,出去 INFO SLAVOF命令之外的任何请求都会返回一个

#    错误 "SYNC with master in progress"

slaveread-only yes

配置 slave实例是否接受写。写 slave对存储短暂数据(在同 master数据同步后可以很容易地被删除)是有用的,但未配置的情况下,客户端写可能会发送问题。

Redis2.6后,默认 slave read-only

repl-disable-tcp-nodelay no

从库会按照一个时间间隔向主库发送 PINGs.可以通过 repl-ping-slave-period设置这个时间间隔,默认是 10

# repl-ping-slave-period 10

# repl-timeout 设置主库批量数据传输时间或者 ping回复时间间隔,默认值是 60

一定要确保 repl-timeout大于 repl-ping-slave-period

# repl-timeout 60

slave socket SYNC后禁用 TCP_NODELAY

如果选择“ yes ,Redis将使用一个较小的数字 TCP数据包和更少的带宽将数据发送到 slave但是这可能导致数据发送到 slave端会有延迟 ,如果是 Linux kernel的默认配置,会达到 40毫秒 .

如果选择 "no",则发送数据到 slave端的延迟会降低,但将使用更多的带宽用于复制 .

slave-priority 100

如果少于 N slave连接,且延迟时间 <=M秒,则 master可配置停止接受写操作。

例如需要至少 3 slave连接,且延迟 <=10秒的配置:

#  min-slaves-to-write 3

#  min-slaves-max-lag 10

设置 0为禁用

#  默认 min-slaves-to-write 0(禁用), min-slaves-max-lag 10

AOF数据备份

appendonly no

# AOF文件名称  (默认 : "appendonly.aof")

# appendfilename appendonly.aof

# Redis支持三种同步 AOF文件的策略 :

# no: 不进行同步,系统去操作  . Faster.

# always: always表示每次有写操作都进行同步 . Slow, Safest.

# everysec: 表示对写操作进行累积,每秒同步一次 . Compromise.

默认是 "everysec",按照速度和安全折中这是最好的。

如果想让 Redis能更高效的运行,你也可以设置为 "no",让操作系统决定什么时候去执行

或者相反想让数据更安全你也可以设置为 "always"

如果不确定就用  "everysec".

# appendfsync always

appendfsync everysec

# appendfsync no

# AOF策略设置为 always或者 everysec时,后台处理进程 (后台保存或者 AOF日志重写 )会执行大量的 I/O操作

在某些 Linux配置中会阻止过长的 fsync()请求。注意现在没有任何修复,即使 fsync在另外一个线程进行处理

为了减缓这个问题,可以设置下面这个参数 no-appendfsync-on-rewrite

no-appendfsync-on-rewrite no

# AOF 自动重写

AOF文件增长到一定大小的时候 Redis能够调用  BGREWRITEAOF 对日志文件进行重写

它是这样工作的: Redis会记住上次进行些日志后文件的大小 (如果从开机以来还没进行过重写,那日子大小在开机的时候确定 )

基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动

同时需要指定一个最小大小用于 AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF文件的情况

设置  percentage 0就关闭这个特性

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-rewrite-incremental-fsync yes

当一个子节点重写 AOF文件时,如果启用下面的选项,则文件每生成 32M数据进行同步。

Lua脚本

lua-time-limit 5000

# 一个 Lua脚本最长的执行时间为 5000毫秒( 5秒),如果为 0或负数表示无限执行时间。

Log日志

slowlog-log-slower-than 10000

# Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括 I/O计算比如连接客户端,返回结果等,只是命令执行时间

可以通过两个参数设置 slow log:一个是告诉 Redis执行超过多少时间被记录的参数 slowlog-log-slower-than(微妙 )

另一个是 slow log的长度。当一个新命令被记录的时候最早的命令将被从队列中移除

下面的时间以微妙为单位,因此 1000000代表一秒。

注意指定一个负数将关闭慢日志,而设置为 0将强制每个命令都会记录

slowlog-max-len 128

对日志长度没有限制,只是要注意它会消耗内存

可以通过  SLOWLOG RESET回收被慢日志消耗的内存

推荐使用默认值 128,当慢日志超过 128时,最先进入队列的记录会被踢出

事件通知

notify-keyspace-events ""

当事件发生时, Redis可以通知 Pub/Sub客户端。

可以在下表中选择 Redis要通知的事件类型。事件类型由单个字符来标识:

# K     Keyspace事件,以 _keyspace@<db>_的前缀方式发布

# E     Keyevent事件,以 _keysevent@<db>_的前缀方式发布

# g    通用事件(不指定类型),像 DEL, EXPIRE, RENAME,

# $     String命令

# s     Set命令

# h     Hash命令

# z    有序集合命令

# x    过期事件(每次 key过期时生成)

# e    清除事件(当 key在内存被清除时生成)

# A     g$lshzxe的别称,因此AKE意味着所有的事件

# notify-keyspace-events带一个由 0到多个字符组成的字符串参数。空字符串意思是通知被禁用。

例子:启用 list和通用事件:

# notify-keyspace-events Elg

默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。

注意如果你不指定至少 K E之一,不会发送任何事件。

高级配置

 

hash-max-zipmap-entries 512

 

hash-max-zipmap-value 64 

hash中包含超过指定元素个数并且最大的元素没有超过临界时,

# hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值

# Redis Hash对应 Value内部实际就是一个 HashMap,实际这里会有 2种不同实现,

这个 Hash的成员比较少时 Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap结构,对应的 valueredisObject encoding zipmap,

当成员数量增大时会自动转成真正的 HashMap,此时 encoding ht

list-max-ziplist-entries 512

list-max-ziplist-value 64

Hash一样,多个小的 list以特定的方式编码来节省空间。

#  list数据类型节点值大小小于多少字节会采用紧凑存储格式。

set-max-intset-entries 512

# set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hashe list一样 ,排序的 set在指定的长度内以指定编码方式存储以节省空间

#  zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。

activerehashing yes

# Redis将在每 100毫秒时使用 1毫秒的 CPU时间来对 redis hash表进行重新 hash,可以降低内存的使用

当你的使用场景中,有非常严格的实时性需要,不能够接受 Redis时不时的对请求有 2毫秒的延迟的话,把这项配置为 no

如果没有这么严格的实时性要求,可以设置为 yes,以便能够尽可能快的释放内存。

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb60

client-output-buffer-limit pubsub 32mb 8mb60

# 客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,

# 可用于强制断开连接(一个常见的原因是一个发布 /订阅客户端消费消息的速度无法赶上生产它们的速度)。

可以三种不同客户端的方式进行设置:

# normal -> 正常客户端

# slave  -> slave MONITOR客户端

# pubsub -> 至少订阅了一个 pubsub channel pattern的客户端

每个 client-output-buffer-limit语法 :

# client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>

一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。

例如,如果硬限制为 32兆字节和软限制为 16兆字节 /10秒,客户端将会立即断开

如果输出缓冲区的大小达到 32兆字节,客户端达到 16兆字节和连续超过了限制 10秒,也将断开连接。

默认 normal客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,

只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。

把硬限制和软限制都设置为 0来禁用该特性

hz 10

# Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除过期的 Key,等等。

不是所有的任务都以相同的频率执行,但 Redis依照指定的“Hz”值来执行检查任务。

默认情况下,“ Hz”的被设定为 10

提高该值将在 Redis空闲时使用更多的 CPU时,但同时当有多个 key同时到期会使 Redis的反应更灵敏,以及超时可以更精确地处理。

范围是 1 500之间,但是值超过 100通常不是一个好主意。

大多数用户应该使用 10这个预设值,只有在非常低的延迟的情况下有必要提高最大到 100

 

 


                --以上为《Redis教程(十) Redis配置文件详解》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝3岁不吃饭怎么办 小孩吃多了吐了怎么办 6岁儿童越来越瘦怎么办 7岁儿童不吃饭怎么办 天热宝宝不好好吃饭怎么办 天热宝宝不爱吃饭怎么办 天热宝宝不想吃饭怎么办 夏天天热宝宝不爱吃饭怎么办 3岁宝宝吃饭不香怎么办 胃ca吃饭反胃没食欲怎么办 12岁儿童脸色发黄怎么办 胃饿 但是没食欲不想吃饭怎么办 牙缝大经常塞西怎么办 吃肉老是塞牙缝怎么办 宝宝光喝奶粉不吃饭怎么办 九个月宝宝缺维c怎么办 九个月宝宝缺维d怎么办 9个月大宝宝缺锌怎么办 三周岁宝宝不爱吃饭怎么办 一周岁宝宝不爱吃饭怎么办 两岁半宝宝不自己吃饭怎么办 3岁宝宝不会吃饭怎么办 节食减肥胃疼怎么办呢 减肥不吃饭胃疼怎么办 过度节食伤了胃怎么办 3岁宝宝啥也不吃怎么办 1岁多宝宝不吃饭怎么办 胃口吃辣的难受怎么办 空腹吃辣椒胃疼怎么办 吃东西辣的胃口疼怎么办 吃辣的东西胃烧怎么办 吃母乳的宝宝不爱喝水怎么办 三个月宝宝不肯吃奶粉怎么办 三个月宝宝不肯喝奶粉怎么办 三个月的宝宝不肯喝奶粉怎么办 三个月的宝宝不肯吃奶粉怎么办 饿了还是没食欲怎么办 3岁半幼儿便秘怎么办 小孩字写得难看怎么办 小孩的字写的丑怎么办 小孩字写的太差怎么办