咱们能够打开redis.conf配置文件,里面涉及了redis运行的一些相关说明:html
序号node |
分类redis |
配置选项数据库 |
说明安全 |
|
1服务器 |
includes网络 |
include /path/to/local.conf数据结构 |
指定包含其它的配置文件,能够在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有本身的特定配置文件并发 |
|
2app |
network (网络) |
bind 127.0.0.1 |
绑定的主机地址, Redis默认只容许本地访问,注释掉【bind 127.0.0.1】可使用全部的IP访问redis,如果想指定多个IP访问,但并非所有的IP访问,能够设置【bind ip地址1 ip地址2 …】 |
|
protected-mode yes |
保护模式, 这是redis3.2以后加入的新特性,Protected-mode 是为了禁止公网访问redis cache,增强redis安全。 它的启用条件有两个: 1).没有bind IP 2).没有设置访问密码 若是启用了,则只能经过lookback ip(127.0.0.1)访问Redis Cache,若是从外网访问,则会报错。 |
|||
port 6379 |
指定Redis服务器的监听端口, 默认端口为6379,做者在本身的一篇博文中解释了为何选用6379做为默认端口,由于6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字 |
|||
此参数肯定了TCP链接中已完成队列(完成三次握手以后)的长度,固然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大而且客户端速度缓慢的时候,能够将这二个参数一块儿参考设定 |
||||
timeout 0 |
超时关闭链接, 当客户端闲置多长时间后关闭链接,若是指定为0,表示关闭该功能 |
|||
tcp-keepalive 300 |
TCP存活时间, 若是值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞。 |
|||
3 |
general |
daemonize no/yes |
Redis默认不是以守护进程的方式运行,能够经过该配置项修改,使用yes启用守护进程,即后台运行Redis服务 |
|
pidfile /var/run/redis_6379.pid |
当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,能够经过pidfile指定 |
|||
loglevel notice |
指定日志记录级别, Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose |
|||
logfile "" |
日志记录方式, 能够为空字符串或stdout,默认为标准输出,若是配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null |
|||
databases 16 |
设置数据库的数量, 默认数据库为0,可使用【SELECT <dbid>】命令在链接上指定数据库id |
|||
是否老是显示logo |
||||
4 |
snapshotting (快照) |
save <seconds> <changes> |
指定在多长时间内,有多少次更新操做,就将数据同步到数据文件,能够多个条件配合;Redis默认配置文件中提供了三个条件: save 900 1 save 300 10 save 60 10000 分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。 |
|
stop-writes-on-bgsave-error yes |
当执行RDB快照保存数据库出错时中止写入, 默认为yes。若是用户对redis服务器和持久化进行了监控,那么能够禁用此功能。 |
|||
rdbcompression yes |
指定存储至本地数据库时是否压缩数据, 默认为yes,Redis采用LZF压缩,若是为了节省CPU时间,能够关闭该选项,但会致使数据库文件变的巨大 |
|||
rdbchecksum yes |
是否校验rdb文件, 更有利于文件的容错性,可是在保存rdb文件的时候,会有大概10%的性能损耗,因此若是你追求高性能,能够关闭该配置。 |
|||
dbfilenamedump.rdb |
指定本地数据库文件名(经过RDB方式保存), 默认值为dump.rdb |
|||
dir ./ |
指定本地数据库存放目录,其中包括经过RDB快照方式和AOF方式持久化的数据库文件。 |
|||
5 |
replication (复制) |
slaveof <masterip> <masterport> |
设置当本机为slave节点时,设置master节点的IP地址及端口 , 在Redis启动时,它会自动从master进行数据同步 |
|
masterauth <master-password> |
当master服务设置了密码保护时,slave服务链接master的密码 |
|||
当slave和master断开链接或者复制正在进行的时候,slave有2种运行方式: # yes: 继续响应客户端的请求。(默认) # no: 除了INFO和SLAVEOF两个命令以外的任何请求,slave都会返回一个错误:"SYNC with master in progress" |
||||
slave-read-only yes |
设置slave从服务器为只读(默认) |
|||
repl-diskless-sync no |
是否使用socket方式复制数据, 目前redis复制提供两种方式,disk和socket。若是新的slave连上来或者重连的slave没法部分同步,就会执行全量同步,master会生成rdb文件。有2种方式: # disk:master建立一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。 # socket: master建立一个新的进程,直接把rdb文件以socket的方式发给slave。 disk方式的时候,当一个rdb保存的过程当中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的状况下推荐用socket方式。 |
|||
repl-diskless-sync-delay 5 |
当使用socket复制数据启用的时候,socket复制的延迟时间, 若是设置成0表示禁用,默认值是5 |
|||
repl-ping-slave-period 10 |
从节点根据指定的时间间隔向主节点发起ping请求 |
|||
repl-disable-tcp-nodelay no |
是否禁止复制tcp连接的tcp nodelay参数, 可传递yes或者no。默认是no。即便用tcp nodelay。若是master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减小包的数量和更小的网络带宽。可是这也可能带来数据的延迟。默认咱们推荐更小的延迟,可是在数据量传输很大的场景下,建议选择yes。 |
|||
slave-priority 100 |
从服务器的优先级, 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举 |
|||
6 |
security (安全) |
requirepass foobared |
设置Redis链接密码, 若是配置了链接密码,客户端在链接Redis时须要经过【AUTH <password>】命令提供密码,默认关闭 |
|
7 |
clients |
maxclients 128 |
设置同一时间最大客户端链接数, 默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件描述符数,若是设置 maxclients 0,表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息 |
|
8 |
memory management (内存管理) |
maxmemory <bytes> |
指定Redis最大内存限制, Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将没法再进行写入操做,但仍然能够进行读取操做。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 |
|
9 |
lazy freeing (延迟加载) |
lazyfree-lazy-eviction no #内存满逐出选项 lazyfree-lazy-expire no #过时key删除选项 lazyfree-lazy-server-del no #内部删除选项 slave-lazy-flush no # slave接收完RDB文件后清空数据选项 |
||
10 |
append only mode (只追加模式) |
appendonly no |
是否以append only模式做为持久化方式, Redis默认使用的是RDB快照方式持久化数据库,这种方式在许多应用中已经足够用了。可是redis若是中途宕机,会致使可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另外一种持久化方式,能够提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。 |
|
appendfilename "appendonly.aof" |
AOF 文件名称, 默认为appendonly.aof |
|||
appendfsync everysec/always/no |
持久化策略的配置, 共有3个可选值: |
|||
在aof重写或者写入rdb文件的时候,会执行大量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文件增加到必定大小的时候Redis可以调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上第二天志重写获得AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。 |
|||
auto-aof-rewrite-min-size 64mb |
设置容许重写的最小AOF文件大小, 避免了达到约定百分比但尺寸仍然很小的状况还要重写 |
|||
aof-load-truncated yes |
redis在启动时 是否能够加载被截断的AOF文件 |
|||
aof-use-rdb-preamble no |
Redis 4.0 新增了 RDB-AOF 混合持久化格式, 这是一个可选的功能, 在开启了这个功能以后, AOF 重写产生的文件将同时包含 RDB 格式的内容和 AOF 格式的内容, 其中 RDB 格式的内容用于记录已有的数据, 而 AOF 格式的内存则用于记录最近发生了变化的数据, 这样 Redis 就能够同时兼有 RDB 持久化和 AOF 持久化的优势 —— 既可以快速地生成重写文件, 也可以在出现问题时, 快速地载入数据。 |
|||
11 |
lua scripting |
Lua脚本最长的执行时间, 单位为毫秒,若是为0或负数表示无限执行时间,默认为5000 |
||
12 |
Redis cluster (集群设置) |
cluster-enabled yes |
集群开关, 默认是不开启集群模式 |
|
cluster-config-file nodes-6379.conf |
集群配置文件的名称, 每一个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件应该和redis配置文件区别开。 |
|||
cluster-node-timeout 15000 |
节点相互链接的超时时间 |
|||
cluster-slave-validity-factor 10 |
在进行故障转移的时候,所有slave都会请求申请为master,可是有些slave可能与master断开链接一段时间了,致使数据过于陈旧,这样的slave不该该被提高为master。该参数就是用来判>断slave节点与master断线的时间是否过长。判断方法是:
#比较slave断开链接的时间和(node-timeout *slave-validity-factor) + repl-ping-slave-period
#若是节点超时时间为三十秒, 而且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即若是超过310秒slave将不会尝试进行故障转移
#可能出现因为某主节点失联却没有从节点能顶上的状况,从而致使集群不能正常工做,在这种状况下,只有等到原来的主节点从新回归到集群,集群才恢复运做
#若是设置成0,则不管从节点与主节点失联多久,从节点都会尝试升级成主节 |
|||
cluster-migration-barrier 1 |
当必定比例的键空间没有被覆盖到(就是某一部分的哈希槽没了,有多是暂时挂了),集群就中止处理任何查询炒做。若是该项设置为no,那么就算请求中只有一部分的键能够被查到,同样能够查询(可是有可能会查不全) |
|||
cluster-require-full-coverage yes |
主节点须要的最小从节点数, 只有达到这个数,主节点失败时,它从节点才会进行迁移 |
|||
13 |
slow log (慢日志) |
slowlog-log-slower-than 10000 |
执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,因此1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录全部命令。 |
|
slowlog-max-len 128 |
慢查询日志长度, 当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你能够经过 SLOWLOG RESET 来释放内存 |
|||
14 |
latency monitor (延迟监控) |
latency-monitor-threshold 0 |
延迟监控功能是用来监控redis中执行比较缓慢的一些操做,用LATENCY打印redis实例在跑命令时的耗时图表。只记录大于等于下边设置的值的操做。0的话,就是关闭监视。默认延迟监控功能是关闭的,若是你须要打开,也能够经过CONFIG SET命令动态设置。 |
|
15 |
(事件通知) |
notify-keyspace-events "" |
|
|
16 |
advanced config (高级配置) |
hash-max-ziplist-entries 512 |
数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash |
|
hash-max-ziplist-value 64 |
value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash |
|||
list-max-ziplist-size -2 |
数据量小于等于list-max-ziplist-entries用ziplist,大于list-max-ziplist-entries用list |
|||
list-compress-depth 0 |
List压缩的深度 |
|||
set-max-intset-entries 512 |
数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set |
|||
zset-max-ziplist-entries 128 |
数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset |
|||
zset-max-ziplist-value 64 |
value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset |
|||
hll-sparse-max-bytes 3000 |
value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense) |
|||
activerehashing yes |
指定是否激活重置哈希, 默认为开启 |
|||
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 |
参数限制分配的缓冲区的大小,防止内存无节制的分配 ,redis server以单进程的方式处理接收到的请求,而redis完成请求有些工做比较慢,好比网络IO和磁盘IO等比较慢的操做。redis为了提升处理客户端请求的响应时间,作了不少优化。好比网络io和磁盘io是异步完成、使用后台进程完成bgsave和bgrewriteaof工做,在server端为客户提供读buffer等等。
client buffer是在server端实现的一个读取缓冲区。redis server在接收到客户端的请求后,把影响结果写入到client buffer中,而不是直接发送给客户端。server把结果写入到client buffer中后,继续处理客户端的其余请求。这样异步处理方式使redis server不会由于网络缘由阻塞其余请求的处理
在客户端与server进行的交互中,每一个链接都会与一个buffer关联,此buffer用来队列化亟待被client接受的响应信息.若是client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.若是buffer中积压的数据达到阀值,将会致使链接被关闭,buffer被移除."
客户端类型:
normarl: 普通客户端 slave: 从节点做为客户端 pub/sub: 发布与订阅的客户端
缓冲区大小限制类型:
hard limit: 缓冲区大小的硬性限制,即阀值最大值,一旦达到就马上关闭链接
soft limit: 缓冲去大小的软性限制,即容忍值,它和seconds配合,若是buffer值超过soft且持续时间达到了seconds,也马上关闭
client-output-buffer-limit参数限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为0,意思是不作任何限制。
通常的话最好都要设置这个参数:
client buffer其实是占用redis的数据内存空间,redis的最大数据内存空间由maxmemory参数限定。当数据内存空间达到maxmemory参数限定值时,redis会开始evict数据,或者直接提示客户端OOM(out of memory),这种状况下主要发生在客户端执行大批量数据读取, 好比keys*、smembers、lrange、hgetall等操做。若是单次查询的数据太多,致使redis的used memory增加一倍。
可是client-output-buffer-limit也不能设置过小,这个会致使客户端读取不到数据。 |
|||
hz 10 |
默认状况下,“hz”设置为10。当Redis空闲时,提升该值将使用更多的CPU,但同时,当有许多密钥同时到期时,将使Redis响应更灵敏,而超时能够更精确地处理。 |
|||
aof-rewrite-incremental-fsync yes |
在AOF重写的时候,若是打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,能够避免过大的延迟峰值 |
|||
本文综合参考如下文章:
1.http://blog.csdn.net/zhanglh046/article/details/78621566
2.https://www.cnblogs.com/moxiaoan/p/5724505.html