Redis配置文件介绍_weixin_30376323的博客-程序员秘密

技术标签: 网络  数据结构与算法  数据库  

  Redis在源码包中存放了一个Redis配置实例文件,文件中对各个配置点进行了简单的介绍,我也通过这个文件来对Redis的一些配置进行一些简单介绍。

一.UNITS(单位)【了解】

  1.Redis服务如果要指定配置文件,则配置文件的路径必须作为第一参数。eg:redis-server /path/to/redis.conf

  2.定义一些基本的度量单位,只支持bytes,不支持bit。

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

  3.度量单位不区分大小写,1GB、1Gb、1gB等书写方式所代表的含义相同。

二.INCLUDES(包含)【了解】

  1.可以用于包含(引入)一个或多个其他配置文件,eg:include /path/to/local.conf

  2.最好将include书写在配置文件的开头,避免在运行时配置内容被覆盖。

三.MODULES(模块)【了解】

  1.用于启动时加载模块。可以使用该命令加载多个模块。eg:loadmodule /path/to/my_module.so

四.NETWORK(网络)【熟悉】

  1.bind:绑定本机可以接受访问的IP,如果未指定,则接受所有来自于可用网络接口的连接。

  2.protected-mode:保护模式,避免在Internet上Redis实例被访问和利用,如果没有使用bind指令及设置密码则只接收本地连接。默认开启

  3.port:端口,默认6379,如果指定为0,Redis将不会在TCP套接字上侦听。

  4.tcp-backlog:TCP 监听的最大容纳数量,在高并发环境下需要一个高backlog值来避免慢客户端连接问题

  5.unixsocket & unixsocketperm:指定将用于侦听的Unix套接字的路径及值,未指定时,Redis将不会在UNIX套接字上侦听。

  6.timeout:客户端空闲N秒后关闭连接(0禁用)

  7.tcp-keepalive:单位秒,每隔多少秒判断连接是否继续,推荐60

五.GENERAL(通用)【精通】

  1.daemonize:Redis守护进程,默认为no,大多数需要改为yes

  2.supervised:Redis监控

  3.pidfile:指定PID文件路径

  4.loglevel:指定日志记录级别

  5.logfile:指定日志文件名

  6.syslog-enabled:是否把日志输出到syslog中

  7.syslog-ident:指定syslog里的日志标识

  8.syslog-facility:指定syslog设备,值可以是USER或LOCAL0-LOCAL7

  9.databases:设置数据库数。

  10.always-show-logo:是否启动日志中的Logo。

六.SNAPSHOTTING(快照)【精通】

  1.save:在给定秒数内执行了给定写入数将触发,把数据库保存到磁盘上。save 秒数 写操作次数,eg:save 300 10

  2.stop-writes-on-bgsave-error:后台存储发生错误时禁止写入,默认为yes,如果不在乎数据不一致等问题,可以设置为no

  3.rdbcompression:对于存储到磁盘的rdb快照是否启用lzf压缩存储,默认为yes,如果不想消耗cpu等资源来进行压缩,可以设置为no,但会导致快照文件变的巨大。

  4.rdbchecksum:存储快照后,是否使用CRC64算法对rdb数据进行校验,会增大大约10%的性能消耗,默认为yes。如果希望获取最大的性能提升,可以设置为no。

  5.dbfilename:设置rdb快照的文件名

  6.dir:指定rdb快照的存储目录。

七.REPLICATION(主从)【精通】

  1.slaveof:连接主库,slaveof 主库ip 主库端口 eg:slaveof 192.168.2.102 6379

  2.masterauth:如果主库需要密码认证则需要在此处指定。

  3.slave-serve-stale-data:Redis复制在 slave 这一端也是非阻塞的。如果为 yes ,slave 在执行同步时,它可以使用老版本的数据来处理查询请求,如果是 no ,slave 将返回一个错误。在完成同步后,slave 需要删除老数据,加载新数据,在这个阶段,slave 会阻止连接进来。

  4.slave-read-only:从库数据是否只读

  5.repl-diskless-sync:新的从站和重连后不能继续备份的从站,需要做所谓的“完全备份”,即将一个RDB文件从主站传送到从站。这个传送有以下两种方式: 
          1)硬盘备份:redis主站创建一个新的进程,用于把RDB文件写到硬盘上。过一会儿,其父进程递增地将文件传送给从站。 
          2)无硬盘备份:redis主站创建一个新的进程,子进程直接把RDB文件写到从站的套接字,不需要用到硬盘。 
          在硬盘备份的情况下,主站的子进程生成RDB文件。一旦生成,多个从站可以立即排成队列使用主站的RDB文件。在无硬盘备份的情况下,一次RDB传送开始,新的从站到达后,需要等待现在的传送结束,才能开启新的传送。 
          如果使用无硬盘备份,主站会在开始传送之间等待一段时间(可配置,以秒为单位),希望等待多个子站到达后并行传送。 
在硬盘低速而网络高速(高带宽)情况下,无硬盘备份更好。

  6.repl-diskless-sync-delay:无盘复制延时开始秒数,默认是5秒,意思是当PSYNC触发的时候,master延时多少秒开始向master传送数据流,以便等待更多的slave连接可以同时传送数据流,因为一旦PSYNC开始后,如果有新的slave连接master,只能等待下次PSYNC。可以配置为0取消等待,立即开始。

  7.repl-ping-slave-period:slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认 60秒)都没有收到响应,就会认为Master挂了。

  8.repl-timeout:slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认 60秒)都没有收到响应,就会认为Master挂了。

  9.repl-disable-tcp-nodelay:是否在主从同步时是否禁用TCP_NODELAY。如果开启TCP_NODELAY,那么主redis会使用更少的TCP包和更少的带宽来向从redis传输数据。但是这可能会增加一些同步的延迟,大概会达到40毫秒左右。如果你关闭了TCP_NODELAY,那么数据同步的延迟时间会降低,但是会消耗更多的带宽。

  10.repl-backlog-size:设置同步队列长度。队列长度(backlog)是主redis中的一个缓冲区,在与从redis断开连接期间,主redis会用这个缓冲区来缓存应该发给从redis的数据。这样的话,当从redis重新连接上之后,就不必重新全量同步数据,只需要同步这部分增量数据即可。

  11.repl-backlog-ttl:如果主redis等了一段时间之后,还是无法连接到从redis,那么缓冲队列中的数据将被清理掉。我们可以设置主redis要等待的时间长度。如果设置为0,则表示永远不清理。默认是1个小时。

  12.slave-priority:给众多的从redis设置优先级,在主redis持续工作不正常的情况,优先级高的从redis将会升级为主redis。而编号越小,优先级越高。比如一个主redis有三个从redis,优先级编号分别为10、100、25,那么编号为10的从redis将会被首先选中升级为主redis。当优先级被设置为0时,这个从redis将永远也不会被选中。默认的优先级为100。

  13.min-slaves-to-write 3&min-slaves-max-lag 10:假如主redis发现有超过M个从redis的连接延时大于N秒,那么主redis就停止接受外来的写请求。这是因为从redis一般会每秒钟都向主redis发出PING,而主redis会记录每一个从redis最近一次发来PING的时间点,所以主redis能够了解每一个从redis的运行情况。

                        上面这个例子表示,假如有大于等于3个从redis的连接延迟大于10秒,那么主redis就不再接受外部的写请求。上述两个配置中有一个被置为0,则这个特性将被关闭。默认情况下min-slaves-to-write为0,而min-slaves-max-lag为10。

  14.slave-announce-ip&slave-announce-port:常用于端口转发或NAT场景下,对Master暴露真实IP和端口信息。

八.SECURITY(安全)【精通】

  1.requirepass:设置Redis实例密码

  2.rename-command:禁用或重命名命令。eg:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

九.CLIENTS(客户机)【了解】

  1.maxclients:设置最大连接数

十.MEMORY MANAGEMENT(内存管理)【熟悉】

  1.maxmemory <bytes>:指定Redis最大内存限制。达到内存限制时,Redis将尝试删除已到期或即将到期的Key。

  2.maxmemory-policy:Redis达到最大内存时将如何选择要删除的内容。

  3.maxmemory-samples:设置样本数量,LRU算法 和 最小 TTL 算法都不是精准的算法,而是估算值,所以可以调整样本数量从而改变精确值,Redis默认会检查这么多个Key并选择其中LRU的那个。

十一.LAZY FREEING(惰性删除)【了解】

  1.lazyfree-lazy-eviction:针对redis内存使用达到maxmeory,并设置有淘汰策略时,在被动淘汰键时,是否采用lazy free机制。因为此场景开启lazy free, 可能使用淘汰键的内存释放不及时,导致redis内存超用,超过maxmemory的限制。此场景使用时,请结合业务测试。

  2.lazyfree-lazy-expire:针对设置有TTL的键,达到过期后,被redis清理删除时是否采用lazy free机制。此场景建议开启,因TTL本身是自适应调整的速度。

  3.lazyfree-lazy-server-del:针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。如rename命令,当目标键已存在,redis会先删除目标键,如果这些目标键是一个big key,那就会引入阻塞删除的性能问题。 此参数设置就是解决这类问题,建议可开启。

  4.slave-lazy-flush:针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景,参数设置决定是否采用异常flush机制。如果内存变动不大,建议可开启。可减少全量同步耗时,从而减少主库因输出缓冲区爆涨引起的内存使用增长。

十二.APPEND ONLY MODE(追加)【熟悉】

  1.appendonly:是否开启AOF持久化

  2.appendfilename:AOF文件名称

  3.appendfsync:设置AOF文件同步策略。有3个可选值

  4.no-appendfsync-on-rewrite:设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no保证数据安全性

  5.auto-aof-rewrite-percentage:aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题).

  6.auto-aof-rewrite-min-size:aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.

  7.aof-load-truncated:指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.

  8.aof-use-rdb-preamble:Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。

十三.LUA SCRIPTING(Lua 脚本) 【了解】

  1.lua-time-limit:一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000

十四.REDIS CLUSTER(集群)【熟悉】

  1.cluster-enabled:如果是yes,表示启用集群,否则以单例模式启动

  2.cluster-config-file:可选,这不是一个用户可编辑的配置文件,这个文件是Redis集群节点自动持久化每次配置的改变,为了在启动的时候重新读取它。

  3.cluster-node-timeout:超时时间,集群节点不可用的最大时间。如果一个master节点不可到达超过了指定时间,则认为它失败了。注意,每一个在指定时间内不能到达大多数master节点的节点将停止接受查询请求。

  4.cluster-slave-validity-factor:如果设置为0,则一个slave将总是尝试故障转移一个master。如果设置为一个正数,那么最大失去连接的时间是node timeout乘以这个factor。

  5.cluster-migration-barrier:一个master和slave保持连接的最小数量(即:最少与多少个slave保持连接),也就是说至少与其它多少slave保持连接的slave才有资格成为master。

  6.cluster-require-full-coverage:如果设置为yes,这也是默认值,如果key space没有达到百分之多少时停止接受写请求。如果设置为no,将仍然接受查询请求,即使它只是请求部分key。 

  7.cluster-slave-no-failover:此选项设置为yes时,可防止从设备尝试对其进行故障转移master在主故障期间。 然而,仍然可以强制执行手动故障转移。

十五.CLUSTER DOCKER/NAT support(集群Docker/NAT支持)

  1.cluster-announce-ip:要宣布的Ip地址

  2.cluster-announce-port:要宣布的数据端口

  3.cluster-announce-bus-port:要宣布的集群总线端口

十六.SLOW LOG(慢日志)【了解】

  1.slowlog-log-slower-than:决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录

  2.slowlog-max-len:它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。

十七.LATENCY MONITOR(延迟监控)

  1.latency-monitor-threshold:能够采样不同的执行路径来知道redis阻塞在哪里。这使得调试各种延时问题变得简单,设置一个毫秒单位的延时阈值来开启延时监控。

十八.EVENT NOTIFICATION(事件通知)

  1.notify-keyspace-events:

十九.ADVANCED CONFIG(高级配置)

  1.hash-max-ziplist-entries 512:表示当hash项(field,value)数>512即ziplist项>1024的时候转为dict

  2.hash-max-ziplist-value 64:表示当hash中的value长度超过64的时候转为dict。

  3.list-max-ziplist-size:

  4.list-compress-depth:

  5.set-max-intset-entries:当集合中的元素全是整数,且长度不超过set-max-intset-entries(默认为512个)时,redis会选用intset作为内部编码

  6.zset-max-ziplist-entries:当有序集合的元素小于zset-max-ziplist-entries配置(默认是128个),同时每个元素的值都小于zset-max-ziplist-value(默认是64字节)时,Redis会用ziplist来作为有序集合的内部编码实现,ziplist可以有效的减少内存的使用

  7.zset-max-ziplist-value:当有序集合的元素小于zset-max-ziplist-entries配置(默认是128个),同时每个元素的值都小于zset-max-ziplist-value(默认是64字节)时,Redis会用ziplist来作为有序集合的内部编码实现,ziplist可以有效的减少内存的使用

  8.hll-sparse-max-bytes:value大小 小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。

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

  10.client-output-buffer-limit:某些条件下,服务器就会立即断开客户端连接。

  11.client-query-buffer-limit:

  12.proto-max-bulk-len:

  13.hz:redis执行任务的频率为1s除以hz。

  14.aof-rewrite-incremental-fsync:在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。

  15.lfu-log-factor:factor越高,可以达到饱和(极限)容纳的key就越多。

  16.lfu-decay-time:decay-time是计数器的衰变时间。

  17.activedefrag:

  18.active-defrag-ignore-bytes:

  19.active-defrag-threshold-lower:

  20.active-defrag-threshold-upper:

  21.active-defrag-cycle-min:

  22.active-defrag-cycle-max:

 

*  虚拟内存(Redis2.6后已移除)

  1.vm-enabled:是否启用虚拟内存。

  2.vm-swap-file:虚拟内存文件路径

  3.vm-max-memory:将大于vm-max-memory的数据放入虚拟内存,注意,所有的索引数据(Key)不会放入虚拟内存。

  4.vm-page-size:设置swap中page的大小

  5.vm-page:设置swap文件中的page的数量。

  6.vm-max-threads:设置访问swap文件的线程数,最好不要超过机器的核数。

  7.glueoutputbuf:设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启。

 

 

 

 

  

 

 

 



转载于:https://www.cnblogs.com/fanqisoft/p/10422381.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30376323/article/details/99101281

智能推荐

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'_cpongo6的博客-程序员秘密

连接MySQL数据库出现异常1234567java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure ...

oracle 数据库查询多条数据的一列值_weixin_30493401的博客-程序员秘密

selectsum(case when hc=13 then JE else 0 end),sum(case when hc=14 then JE else 0 end),sum(case when hc=15 then JE else 0 end),sum(case when hc=16 then JE else 0 end)from 表名转载于:https://www.c...

定时器实现方式_yun2008yun的博客-程序员秘密_handle实现定时器

1、Handler + Thread (利用的Thread的sleepI(long)接口)2、Handler的postDelayed(Runnable, long)接口3、采用Handler与java的Timer 及 TimerTask 结合的方法采用Handler 和 Thread的sleep(long)方法 handler 主要用来处理接收到的信息(分发+处理),当然其

easyexcel使用问题处理_芊芊寻的博客-程序员秘密_easyexcel常见问题

项目中有处理excel文件需求,之前用过poi和jxl,两者处理文档的速度很快,但jxl无法处理07及以上版本的excel,而poi经常出现outofmemory错误,了解到阿里有一个开源的easyexcel可以解决poi中的oom问题,所以在项目中尝试使用easyexcel替代poi。传送门:easyexcel在实际使用过程中发现有几个地方有些小问题,一是当07版本excel文件中有多个shee...

winform学习(9)Timer控件_b4834988的博客-程序员秘密

利用Timer控件制作简单的跑马灯:拉一个Lable控件至窗体中心,Text内容为★★★★再拉一个Timer控件,属性Enabled设置为True(即开启控件),Interval设置为100(单位为ms)双击Timer控件进入默认Tick事件方法private void timer1_Tick(object sender, System.EventArgs...

SWT Browser_Helen_Happy的博客-程序员秘密

-Dorg.eclipse.swt.browser.DefaultType=webkit指定浏览器类型

随便推点

nodeJS的卸载 & 多版本nodeJS的安装配置 & 运行vue-element-admin项目_Chandra Chen的博客-程序员秘密

文章目录下载nodeJS安装准备 —— 创建安装目录的文件夹安装版本较低的nodeJS创建node的环境变量配置path中的node路径安装另一个版本较高的nodeJS下载nodeJS安装准备 —— 创建安装目录的文件夹在安装node之前,我先选择一个node安装目录,我要安装到D盘下,所以在D盘中新建啦一个node的目录,并且在里面创建不同版本名的文件夹,应为我一会儿要在12.22.6文件夹中安装12.22.6版本的node注意:必须先安装低版本的node,否则,安装时会提示已经安装了更新

el-table长列表进行下拉分页_爱分享的Hayes小朋友的博客-程序员秘密_el-table 滚动分页

el-table长列表进行下拉分页在我们开发表格的时候,一般都会用到分页,有点击页码分页和下拉分页,点击页码分页在这里就不和大家分享了,今天和大家分享一下下拉分页。下拉分页的原理就是:el-table + 无限滚动我使用的是一个插件:el-table-infinite-scroll插件地址:https://www.npmjs.com/package/el-table-infinite-scrollnpm i el-table-infinite-scroll //安装依赖// 在main.j

多数据源_木可baby的博客-程序员秘密

多数据源处理,且自动切换数据源1.配置数据源地址、账号、密码#数据源 1url:jdbc:mysql://ip1:3306/test1?useUnicode=true&amp;characterEncoding=utf8&amp;characterSetResults=utf8driverClassName:com.mysql.jdbc.Driverusername:rootpassw...

Hadoop Mapreduce任务出错,Child Error_iteye_10418的博客-程序员秘密

集群出现大面积任务失败,表现为mapreduce刚启动不久,就抛出异常,查看log可以看到,Status : FAILEDjava.lang.Throwable: Child Errorat org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)Caused by: java.io.IOException: Task...

vim 配置及ctag cscope_雨林水枫的博客-程序员秘密

1. 平时都是使用source insight软件进行编辑和查看代码,当代码量巨大或者代码在server上时,使用source insight会比较慢,或者直接崩溃,如果配置好vim在加上ctag 一些插件,使用起来会方便的多,也看个人习惯,不要求熟练,个人觉得需要会用一些2. vim的配置文件~/.vimrc中map :!ctags -R --c++-kinds=+p --fiel

在Ubuntu系统中重置root密码_寰宇001的博客-程序员秘密_ubuntu重置root密码

对于现代人,特别是年轻人,都有过忘记密码的经历吧。在这篇文章中,我们来了解如何在 Ubuntu 18.04 LTS 和 Ubuntu 20.04 中重置忘记的 root 密码。首先,你需要开机或重启你的 Ubuntu 系统。你需要先进入 GRUB 菜单,如果你的系统是在 VirtualBox 上运行,按键盘上的 SHIFT 调出启动菜单。然后,按 e 键来编辑 GRUB 参数,将会显示如下的界面:往下滚动,找到以 ‘linux /boot/vmlinuz’ 开始的一行,已在下图中标记出来:找到

推荐文章

热门文章

相关标签