Redis配置文件分析

#Redis演示示例配置文件

 

# 注意单位问题:当须要设置内存大小的时候,能够使用类似1k、5GB、4M这种常见格式:

#

# 1k=> 1000 bytes

#1kb => 1024 bytes

# 1m=> 1000000 bytes

#1mb => 1024*1024 bytes

# 1g=> 1000000000 bytes

#1gb => 1024*1024*1024 bytes

#

# 单位是大写和小写不敏感的,所以1GB 1Gb 1gB的写法都是全然一样的。

 

#Redis默认是不作为守护进程来执行的。你能够把这个设置为"yes"让它作为守护进程来执行。

# 注意。当作为守护进程的时候,Redis会把进程ID写到 /var/run/redis.pid

daemonizeno

 

# 当以守护进程方式执行的时候。Redis会把进程ID默认写到 /var/run/redis.pid。

你能够在这里改动路径。

pidfile/var/run/redis.pid

 

# 接受连接的特定port,默认是6379

# 假设port设置为0,Redis就不会监听TCP套接字。

port6379

 

# 假设你想的话,你能够绑定单一接口;假设这里没单独设置。那么全部接口的连接都会被监听。

#

#bind 127.0.0.1

 

# 指定用来监听连接的unxi套接字的路径。这个没有默认值,所以假设你不指定的话。Redis就不会通过unix套接字来监听。

#

#unixsocket /tmp/redis.sock

#unixsocketperm 755

 

#一个client空暇多少秒后关闭连接。(0代表禁用,永不关闭)

timeout0

 

# 设置server调试等级。

# 可能值:

#debug (非常多信息,对开发/測试实用)

#verbose (非常多精简的实用信息,可是不像debug等级那么多)

#notice (适量的信息,基本上是你生产环境中须要的程度)

#warning (仅仅有非常重要/严重的信息会记录下来)

loglevelverbose

 

# 指明日志文件名称。也能够使用"stdout"来强制让Redis把日志信息写到标准输出上。

# 注意:假设Redis以守护进程方式执行,而你设置日志显示到标准输出的话,那么日志会发送到 /dev/null

logfilestdout

 

# 要使用系统日志记录器非常easy,仅仅要设置"syslog-enabled" 为 "yes" 就能够了。

# 然后依据须要设置其它一些syslog參数就能够了。

#syslog-enabled no

 

# 指明syslog身份

#syslog-ident redis

 

# 指明syslog的设备。

必须是一个用户或者是 LOCAL0 ~ LOCAL7 之中的一个。

#syslog-facility local0

 

# 设置数据库个数。默认数据库是 DB 0。你能够通过SELECT <dbid> WHERE dbid(0~'databases' - 1)来为每一个连接使用不同的数据库。

databases16

 

################################快照#################################

 

#

# 把数据库存到磁盘上:

#

#  save <seconds> <changes>

#  

#  会在指定秒数和数据变化次数之后把数据库写到磁盘上。

#

#  以下的样例将会进行把数据写入磁盘的操作:

#  900秒(15分钟)之后。且至少1次变更

#  300秒(5分钟)之后,且至少10次变更

#  60秒之后,且至少10000次变更

#

#  注意:你要想不写磁盘的话就把全部"save" 设置凝视掉即可了。

 

save900 1

save300 10

save60 10000

 

# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象。

# 默认设置为 "yes",所以差点儿总是生效的。

# 假设你想节省CPU的话你能够把这个设置为 "no",可是假设你有可压缩的key的话,那数据文件就会更大了。

rdbcompressionyes

 

# 数据库的文件名称

dbfilenamedump.rdb

 

# 工作文件夹

#

# 数据库会写到这个文件夹下,文件名称就是上面的"dbfilename" 的值。

#

# 累加文件也放这里。

#

# 注意你这里指定的必须是文件夹,不是文件名称。

dir./

 

#################################同步#################################

 

#

# 主从同步。

通过 slaveof 配置来实现Redis实例的备份。

# 注意,这里是本地从远端复制数据。也就是说,本地能够有不同的数据库文件、绑定不同的IP、监听不同的port。

#

#slaveof <masterip> <masterport>

 

# 假设master设置了password(通过以下的 "requirepass" 选项来配置),那么slave在開始同步之前必须进行身份验证,否则它的同步请求会被拒绝。

#

#masterauth <master-password>

 

# 当一个slave失去和master的连接。或者同步正在进行中,slave的行为有两种可能:

#

# 1)假设 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应client请求。可能是正常数据。也可能是还没获得值的空数据。

# 2)假设 slave-serve-stale-data 设置为 "no"。slave会回复"正在从master同步(SYNCwith master in progress)"来处理各种请求。除了 INFO 和 SLAVEOF 命令。

#

slave-serve-stale-datayes

 

#slave依据指定的时间间隔向server发送ping请求。

# 时间间隔能够通过 repl_ping_slave_period 来设置。

# 默认10秒。

#

#repl-ping-slave-period 10

 

# 以下的选项设置了大块数据I/O、向master请求数据和ping响应的过期时间。

# 默认值60秒。

#

# 一个非常重要的事情是:确保这个值比 repl-ping-slave-period 大,否则master和slave之间的传输过期时间比预想的要短。

#

#repl-timeout 60

 

##################################安全###################################

 

# 要求client在处理不论什么命令时都要验证身份和password。

# 这在你信只是来訪者时非常实用。

#

# 为了向后兼容的话。这段应该凝视掉。并且大多数人不须要身份验证(比如:它们执行在自己的server上。

#

# 警告:由于Redis太快了,所以居心不良的人能够每秒尝试150k的password来试图破解password。

# 这意味着你须要一个高强度的password,否则破解太easy了。

#

#requirepass foobared

 

# 命令重命名

#

# 在共享环境下。能够为危急命令改变名字。比方,你能够为 CONFIG 改个其它不太easy猜到的名字,这样你自己仍然能够使用,而别人却没法做坏事了。

#

# 比如:

#

#rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

#

# 甚至也能够通过给命令赋值一个空字符串来全然禁用这条命令:

#

#rename-command CONFIG ""

 

###################################限制####################################

 

#

# 设置最多同一时候连接client数量。

# 默认没有限制。这个关系到Redis进程可以打开的文件描写叙述符数量。

# 特殊值"0"表示没有限制。

# 一旦达到这个限制。Redis会关闭全部新连接并发送错误"达到最大用户数上限(max number of clientsreached)"

#

#maxclients 128

 

# 不要用比设置的上限很多其它的内存。一旦内存使用达到上限。Redis会依据选定的回收策略(參见:maxmemmory-policy)删除key。

#

# 假设由于删除策略问题Redis无法删除key,或者策略设置为 "noeviction",Redis会回复须要很多其它内存的错误信息给命令。

# 比如。SET,LPUSH等等。可是会继续合理响应仅仅读命令,比方:GET。

#

# 在使用Redis作为LRU缓存。或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)的时候,这个选项还是满实用的。

#

# 警告:当一堆slave连上达到内存上限的实例的时候,响应slave须要的输出缓存所需内存不计算在使用内存其中。

# 这样当请求一个删除掉的key的时候就不会触发网络问题/又一次同步的事件。然后slave就会收到一堆删除指令,直到数据库空了为止。

#

# 简而言之,假设你有slave连上一个master的话,那建议你把master内存限制设小点儿。确保有足够的系统内存用作输出缓存。

# (假设策略设置为"noeviction"的话就不无所谓了)

#

#maxmemory <bytes>

 

# 内存策略:假设达到内存限制了。Redis怎样删除key。你能够在以下五个策略里面选:

#

#volatile-lru -> 依据LRU算法生成的过期时间来删除。

#allkeys-lru -> 依据LRU算法删除不论什么key。

#volatile-random -> 依据过期设置来随机删除key

#allkeys->random -> 无区别随机删。

#volatile-ttl -> 依据近期过期时间来删除(辅以TTL

#noeviction -> 谁也不删,直接在写操作时返回错误。

#

# 注意:对全部策略来说。假设Redis找不到合适的能够删除的key都会在写操作时返回一个错误。

#

#      这里涉及的命令:set setnx setexappend

#      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-policy volatile-lru

 

#LRU和最小TTL算法的实现都不是非常精确。可是非常接近(为了省内存),所以你能够用例子做測试。

# 比如:默认Redis会检查三个key然后取最旧的那个。你能够通过以下的配置项来设置样本的个数。

#

#maxmemory-samples 3

 

##############################纯累加模式###############################

 

# 默认情况下,Redis是异步的把数据导出到磁盘上。这样的情况下。当Redis挂掉的时候,最新的数据就丢了。

# 假设不希望丢掉不论什么一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。

# 每次启动时Redis都会把这个文件的数据读入内存里。

#

# 注意。异步导出的数据库文件和纯累加文件能够并存(你得把上面全部"save"设置都凝视掉,关掉导出机制)。

# 假设纯累加模式开启了。那么Redis会在启动时加载日志文件而忽略导出的 dump.rdb 文件。

#

# 重要:查看 BGREWRITEAOF 来了解当累加日志文件太大了之后,怎么在后台又一次处理这个日志文件。

 

appendonlyno

 

# 纯累加文件名称字(默认:"appendonly.aof"

#appendfilename appendonly.aof

 

#fsync() 请求操作系统立即把数据写到磁盘上。不要再等了。

# 有些操作系统会真的把数据立即刷到磁盘上;有些则要磨蹭一下。可是会尽快去做。

#

#Redis支持三种不同的模式:

#

# no:不要立马刷,仅仅有在操作系统须要刷的时候再刷。比較快。

#always:每次写操作都立马写入到aof文件。慢,可是最安全。

#everysec:每秒写一次。折衷方案。

#

# 默认的 "everysec" 通常来说能在速度和数据安全性之间取得比較好的平衡。

# 假设你真的理解了这个意味着什么,那么设置"no"能够获得更好的性能表现(假设丢数据的话,则仅仅能拿到一个不是非常新的快照)。

# 或者相反的,你选择 "always" 来牺牲速度确保数据安全、完整。

#

# 假设拿不准。就用 "everysec"

 

#appendfsync always

appendfsynceverysec

#appendfsync no

 

# 假设AOF的同步策略设置成"always" 或者 "everysec",那么后台的存储进程(后台存储或写入AOF日志)会产生非常多磁盘I/O开销。

# 某些Linux的配置下会使Redis由于 fsync() 而堵塞非常久。

# 注意,眼下对这个情况还没有完美修正,甚至不同线程的 fsync() 会堵塞我们的 write(2) 请求。

#

# 为了缓解这个问题。能够用以下这个选项。它能够在 BGSAVE 或 BGREWRITEAOF 处理时阻止 fsync()。

#

# 这就意味着假设有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。

# 这实际上是说。在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)

#

# 假设你有延迟的问题那就把这个设为 "yes",否则就保持 "no",这是保存持久数据的最安全的方式。

no-appendfsync-on-rewriteno

 

# 自己主动重写AOF文件

#

# 假设AOF日志文件大到指定百分比。Redis可以通过 BGREWRITEAOF 自己主动重写AOF日志文件。

#

# 工作原理:Redis记住上次重写时AOF日志的大小(或者重新启动后没有写操作的话,那就直接用此时的AOF文件),

#          基准尺寸和当前尺寸做比較。

假设当前尺寸超过指定比例,就会触发重写操作。

#

# 你还须要指定被重写日志的最小尺寸,这样避免了达到约定百分比但尺寸仍然非常小的情况还要重写。

#

# 指定百分比为0会禁用AOF自己主动重写特性。

 

auto-aof-rewrite-percentage100

auto-aof-rewrite-min-size64mb

 

##################################慢查询日志###################################

 

#Redis慢查询日志能够记录超过指定时间的查询。执行时间不包含各种I/O时间。

# 比如:连接client,发送响应数据等。仅仅计算命令执行的实际时间(这是唯一一种命令执行线程堵塞而无法同一时候为其它请求服务的场景)

#

# 你能够为慢查询日志配置两个參数:一个是超标时间,单位为微妙。记录超过个时间的命令。

# 还有一个是慢查询日志长度。当一个新的命令被写进日志的时候。最老的那个记录会被删掉。

#

# 以下的时间单位是微秒。所以1000000就是1秒。注意,负数时间会禁用慢查询日志。而0则会强制记录全部命令。

slowlog-log-slower-than10000

 

# 这个长度没有限制。仅仅要有足够的内存即可。你能够通过 SLOWLOG RESET 来释放内存。(译者注:日志竟然是在内存里的Orz)

slowlog-max-len128

 

################################虚拟内存###############################

 

### 警告。虚拟内存在Redis 2.4是反对的。

### 很不鼓舞使用虚拟内存!!

 

# 虚拟内存能够使Redis在内存不够的情况下仍然能够将全部数据序列保存在内存里。

# 为了做到这一点,高频key会调到内存里,而低频key会转到交换文件中,就像操作系统使用内存页一样。

#

# 要使用虚拟内存。仅仅要把 "vm-enabled" 设置为 "yes",并依据须要设置以下三个虚拟内存參数就能够了。

 

vm-enabledno

#vm-enabled yes

 

# 这是交换文件的路径。预计你猜到了,交换文件不能在多个Redis实例之间共享,所以确保每一个Redis实例使用一个独立交换文件。

#

# 最好的保存交换文件(被随机訪问)的介质是固态硬盘(SSD)。

#

#*** 警告 *** 假设你使用共享主机,那么默认的交换文件放到 /tmp 下是不安全的。

# 创建一个Redis用户可写的文件夹。并配置Redis在这里创建交换文件。

vm-swap-file/tmp/redis.swap

 

#"vm-max-memory" 配置虚拟内存可用的最大内存容量。

# 假设交换文件还有空间的话。全部超标部分都会放到交换文件中。

#

#"vm-max-memory" 设置为0表示系统会用掉全部可用内存。

# 这默认值不咋地,仅仅是把你能用的内存全用掉了,留点余量会更好。

# 比如。设置为剩余内存的60%-80%

vm-max-memory0

 

#Redis交换文件是分成多个数据页的。

# 一个可存储对象能够被保存在多个连续页里,可是一个数据页无法被多个对象共享。

# 所以。假设你的数据页太大,那么小对象就会浪费掉非常多空间。

# 假设数据页太小。那用于存储的交换空间就会更少(假定你设置同样的数据页数量)

#

# 假设你使用非常多小对象。建议分页尺寸为64或32个字节。

# 假设你使用非常多大对象,那就用大一些的尺寸。

# 假设不确定。那就用默认值 :)

vm-page-size32

 

# 交换文件中数据页总数。

# 依据内存中分页表(已用/未用的数据页分布情况),磁盘上每8个数据页会消耗内存里1个字节。

#

# 交换区容量 = vm-page-size * vm-pages

#

# 依据默认的32字节的数据页尺寸和134217728的数据页数来算,Redis的数据页文件会占4GB,而内存里的分页表会消耗16MB内存。

#

# 为你的应验程序设置最小且够用的数字比較好,以下这个默认值在大多数情况下都是偏大的。

vm-pages134217728

 

# 同一时候可执行的虚拟内存I/O线程数。

# 这些线程能够完毕从交换文件进行数据读写的操作,也能够处理数据在内存与磁盘间的交互和编码/解码处理。

# 多一些线程能够一定程度上提高处理效率。尽管I/O操作本身依赖于物理设备的限制,不会由于很多其它的线程而提高单次读写操作的效率。

#

# 特殊值0会关闭线程级I/O,并会开启堵塞虚拟内存机制。

vm-max-threads4

 

###############################高级配置###############################

 

# 当有大量数据时,适合用哈希编码(须要很多其它的内存),元素数量上限不能超过给定限制。

# 你能够通过以下的选项来设定这些限制:

hash-max-zipmap-entries512

hash-max-zipmap-value64

 

# 与哈希相类似。数据元素较少的情况下,能够用还有一种方式来编码从而节省大量空间。

# 这样的方式仅仅有在符合以下限制的时候才干够用:

list-max-ziplist-entries512

list-max-ziplist-value64

 

# 还有这样一种特殊编码的情况:数据全是64位无符号整型数字构成的字符串。

# 以下这个配置项就是用来限制这样的情况下使用这样的编码的最大上限的。

set-max-intset-entries512

 

# 与第一、另外一种情况相似,有序序列也能够用一种特别的编码方式来处理,可节省大量空间。

# 这样的编码仅仅适合长度和元素都符合以下限制的有序序列:

zset-max-ziplist-entries128

zset-max-ziplist-value64

 

# 哈希刷新。每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。

#redis所用的哈希表实现(见dict.c)採用延迟哈希刷新机制:你对一个哈希表操作越多。哈希刷新操作就越频繁;

# 反之,假设server很不活跃那么也就是用点内存保存哈希表而已。

#

# 默认是每秒钟进行10次哈希表刷新。用来刷新字典,然后尽快释放内存。

#

# 建议:

# 假设你对延迟比較在意的话就用 "activerehashingno",每一个请求延迟2毫秒不太好嘛。

# 假设你不太在意延迟而希望尽快释放内存的话就设置"activerehashing yes"

activerehashingyes

 

##################################包括###################################

 

# 包括一个或多个其它配置文件。

# 这在你有标准配置模板可是每一个redisserver又须要个性设置的时候非常实用。

# 包括文件特性同意你引人其它配置文件。所以好好利用吧。

#

#include /path/to/local.conf

#include /path/to/other.conf

版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/hrhguanli/p/4886871.html