Redis 入门到超神 - 03 redis.conf 配置文件详解
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的 JavaLib」第一时间阅读最新文章,回复【资料】,即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板。
注意,redis 配置文件中的单位是不区分大小写的,比如 1GB 1Gb 1gB 都是一样的。并且各单位转换关系如下:
1k => 1000 bytes1kb => 1024 bytes1m => 1000000 bytes1mb => 10241024 bytes1g => 1000000000 bytes1gb => 10241024*1024 bytes
Redis 的配置文件默认名为 redis.conf
。
如果我们通过客户端连接上 redis,可以通过 CONFIG
命令查看或设置配置项。查看配置项的命令为 CONFIG GET CONFIG_SETTING_NAME
。
# 查看端口号配置项
127.0.0.1:6379> CONFIG GET port
1) "port"
2) "6379"
# 查看密码配置项
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379>
当然,也可以通过CONFIG GET *
查看所有配置项。此只列出部分配置项。
127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "123456"
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
10) ""
11) "logfile"
12) ""
13) "pidfile"
14) "/var/run/redis_6379.pid"
15) "slave-announce-ip"
16) ""
17) "replica-announce-ip"
18) ""
19) "maxmemory"
20) "0"
21) "proto-max-bulk-len"
22) "536870912"
23) "client-query-buffer-limit"
24) "1073741824"
25) "maxmemory-samples"
26) "5"
....
CONFIG SET 命令修改配置项,语法为 CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
# 修改日志级别
127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
不过我们一般是打开 redis.conf 配置文件,进行修改,然后再重新启动 redis 服务。
################################## INCLUDES 包含 ###################################
# 如果有多个配置文件,可以在此配置引入。
# 引入其它配置文件。如果你有多个redis服务,而有一些配置项是它们公用的,那么你可以将这些公用的配置项写进一个配置文件common.conf里,
# 然后这些redis服务再include这个配置文件,这些服务自己的配置项则分别写在自己的配置文件里。
#
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES 模块 #####################################
# 如果我们需要加载其他模块,可以在此配置
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
################################## NETWORK 网络 #####################################
# 指定redis只接收哪些IP的请求,如果配置bind 127.0.0.1则只监听本机的客户端请求,如果注释掉不进行设置,则代表接收所有IP的请求。
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# bind 127.0.0.1
# are explicitly listed using the "bind" directive.
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只能本地进行访问,拒绝外部访问。
# 如果开启了密码和bind,可以开启。否则最好关闭,即设置为no。
#
protected-mode no
# 设置监听的端口号,默认是6379。如果设置0,则不监听任何tcp请求。
#
port 6379
# 在高并发环境下,并且客户端连接请求慢时,你需要设置更高的值。此值代表了TCP连接中已完成队列(完成三次握手之后)的长度,
# 此值必须会受到Linux系统下/proc/sys/net/core/somaxconn文件中值的限制,redis默认是511,而Linux的默认参数值是128。
# 所以我们得同时提高这2个值的大小,以至于能获得更好的性能以及预期的效果。一般会将它修改为2048或者更大。
# 在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p
#
tcp-backlog 511
# 配置unix socket的路径,来让redis支持监听本地连接。
# unixsocket /tmp/redis.sock
# 配置unix socket使用文件的权限。
# unixsocketperm 700
# 此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0
timeout 0
# tcp 保活。单位是秒。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值。
# 使用keepalive有两个好处:
# 1. 检测挂掉的对端。
# 2. 降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。
# 在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值
tcp-keepalive 300
################################# GENERAL 基本 #####################################
# 是否在后台执行,yes代表后台运行。如果后台允许,会将服务pid写到/var/run/redis.pid文件中
daemonize yes
# 可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的。
supervised no
# redis服务后台启动时,pid写入的文件位置
pidfile /var/run/redis_6379.pid
# 日志级别。
# debug:记录大量日志信息,适用于开发和测试
# verbose:较多日志信息
# notice:适量日志信息,适用于生产环境
# warning:仅有部分重要、关键信息才会被记录
loglevel notice
# 日志文件的位置,当指定为空字符串时,为标准输出,如果redis为守护进程模式运行,那么日志将会输出到 /dev/null
logfile ""
# 是否把日志记录到系统日志
# syslog-enabled no
# 设置系统日志的id
# syslog-ident redis
# 指定syslog设备,必须是user或则local0到local7
# syslog-facility local0
# 设置数据库的数目。默认的数据库是DB 0 ,可以在每个连接上使用select <dbid> 命令选择一个不同的数据库,dbid是一个介于0到databases - 1之间的数值。
databases 16
# 是否在交互式终端启动的时候显示log,不用管它就好,感觉没啥意义
always-show-logo yes
################################ SNAPSHOTTING 快照 ################################
# 保存数据到磁盘。格式是:save <seconds> <changes> ,即在seconds秒之后至少有changes个keys发生改变则保存一次。
# 如果你不想保存数据到磁盘,则注释掉所有save行即可,也可改为save ""
#
# save ""
save 900 1
save 300 10
save 60 10000
# 默认情况下,如果redis最后一次的后台保存失败,redis将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,
# 否则就会没人注意到灾难的发生。如果后台保存进程重新启动工作了,redis也将自动的允许写操作。
# 然而你要是安装了靠谱的监控,你可能不希望redis这样做,那你就改成no。
#
stop-writes-on-bgsave-error yes
# 是否在dump.rdb数据库的时候压缩字符串,默认设置为yes。如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大。
rdbcompression yes
# 是否CRC64校验rdb文件,会有一定的性能损失(大概10%)。
rdbchecksum yes
# rdb文件的名字。
dbfilename dump.rdb
# 数据库存放目录。必须是一个目录,aof文件也会保存到该目录下。默认在启动脚本相同的目录下。
dir ./
################################# REPLICATION 主从复制 #################################
# 设置本机为slave服务,并且填写主节点的ip和端口号
#
# replicaof <masterip> <masterport>
# master的密码。如果master服务设置了密码保护,slave服务连接master时需要密码。
#
# masterauth <master-password>
# 当一个slave与master失去联系时,或者复制正在进行的时候,slave应对请求的2种行为:
# 1:如果设置yes(默认值),slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候;
# 2:如果设置no,在你执行除了info和replicaOF和AUTH..等之外的其他命令时,slave返回一个"SYNC with master in progress"的错误。
#
replica-serve-stale-data yes
# 设置slave是否是只读的。从2.6版起,slave默认是只读的。
#
replica-read-only yes
# 主从数据复制是否使用无硬盘复制功能。
#
repl-diskless-sync no
# 当五磁盘复制被开启时,等待5s后再开始复制,因为要等更多replica重新连接过来,可以公用一个RDB。如果不延迟等待可以设置为0
#
repl-diskless-sync-delay 5
# 指定slave定期ping master的周期,默认10秒钟。
#
# repl-ping-replica-period 10
# 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒 。
# master node将rdb快照文件发送给replica node,如果rdb复制时间超过60秒,那么replica node就会认为复制失败,
# 可以适当调大这个参数(对于千兆网卡的机器,一般每秒传输 100MB,6G 文件,很可能超过 60s)
# repl-timeout 60
# 指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,
# 这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为“no”,表明启用NO_DELAY,
# 则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。则TCP协议栈不会延迟小包的发送时机,
# 这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,
# 但在主从节点间网络负载已经很高的情况下,可以配置为yes。
repl-disable-tcp-nodelay no
# 设置主从复制backlog容量大小。这个 backlog 是一个用来在 slaves 被断开连接时存放 slave 数据的 buffer,
# 所以当一个 slave 想要重新连接,通常不希望全部重新同步,只是部分同步就够了,
# 仅仅传递 slave 在断开连接时丢失的这部分数据。这个值越大,salve 可以断开连接的时间就越长。
#
# repl-backlog-size 1mb
# A value of 0 means to never release the backlog.
# 配置当master和slave失去联系多少秒之后,清空backlog释放空间。当配置成0时,表示永远不清空。
#
# repl-backlog-ttl 3600
# 当master不能正常工作的时候,Redis Sentinel会从slaves中选出一个新的 master,这个值越小,
# 就越会被优先选中,但是如果是0,那是意味着这个slave不可能被选中。默认优先级为 100。
replica-priority 100
# redis提供了可以让master停止写入的方式,如果配置了min-replicas-to-write,健康的slave的个数小于N,mater就禁止写入。
# master最少得有N个健康的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作,
# 但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。设置为0是关闭该功能。
# 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
################################## SECURITY 安全 ###################################
# redis连接密码
#
requirepass 123456
# 将命令重命名。为了安全考虑,可以将某些重要的、危险的命令重命名。当你把某个命令重命名成空字符串的时候就等于取消了这个命令。
# rename-command CONFIG b4dw78w47d15w4d8w,表示将CONFIG命令重命名为b4dw78w47d15w4d8w;rename-command CONFIG "" 代表禁用CONFIG
#
# rename-command CONFIG ""
################################### CLIENTS 客户端 ####################################
# 设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数-32(redis server自身会使用一些),
# 如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。
#
# maxclients 10000
############################## MEMORY MANAGEMENT 内存管理 ################################
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,
# 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
# Redis新的vm机制,会把Key存放内存,Value会存放在swap区,格式:maxmemory <bytes> 。
#
# maxmemory <bytes>
# 当内存使用达到最大值时,redis使用的清除策略。有以下几种可以选择:
# 1:volatile-lru -> 利用LRU算法移除设置了过期时间的key (LRU:最近最少使用 Least Recently Used )
# 2:allkeys-lru -> 利用LRU算法移除任何key
# 3:volatile-lfu -> 利用LFU算法移除设置了过期时间的key (LFU:最不经常使用 Least Frequently Used )
# 4:allkeys-lfu -> 利用LFU算法移除任何key
# 3)volatile-random -> 移除设置了过期时间的随机key
# 4)allkeys-random -> 移除随机key
# 5)volatile-ttl -> 移除即将过期的key(minor TTL)
# 6)noeviction noeviction 不移除任何key,只是返回一个写错误 。默认选项
#
# maxmemory-policy noeviction
# LRU和minimal TTL算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。
# redis默认选择5个样本进行检测,你可以通过maxmemory-samples进行设置样本数。
#
# maxmemory-samples 5
# 是否开启salve的最大内存
#
# replica-ignore-maxmemory yes
############################# LAZY FREEING 阻塞方式释放内存? ####################################
# 当使用DEL命令时,会停止执行新的命令,删除key对应的value是个小对象,速度会很快,如果是个大对象,则会阻塞比较长时间。
# 如下配置是否以非阻塞方式释放内存
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
############################## APPEND ONLY MODE 追加模式 ###############################
# Please check http://redis.io/topics/persistence for more information.
# 是否启用aof持久化方式 。即是否在每次更新操作后进行日志记录,默认配置是no,
# 即采用异步方式把数据写入到磁盘,如果不开启,可能会在断电时导致部分数据丢失。
# AOF 和 RDB 可以同时开启。如果AOF开启了,恢复时会选用AOF
#
appendonly no
# 追加模式的文件名,默认为appendonly.aof
#
appendfilename "appendonly.aof"
# aof文件刷新的频率。有三种:推荐使用 everysec
# 1:no 依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差。
# 2: always 每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全。
# 3:everysec 每秒钟都调用fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据。
#
# appendfsync always
appendfsync everysec
# appendfsync no
# 指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。
# Redis在后台写RDB文件或重写AOF文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。
#
no-appendfsync-on-rewrite no
# 当AOF文件增长到一定大小的时候Redis能够调用BGREWRITEAOF对日志文件进行重写。当AOF文件大小的增长率大于该配置项时自动开启重写。
auto-aof-rewrite-percentage 100
# 当AOF文件增长到一定大小的时候Redis能够调用BGREWRITEAOF对日志文件进行重写 。当AOF文件大小大于该配置项时自动开启重写。
auto-aof-rewrite-min-size 64mb
# redis在启动时可以加载被截断的AOF文件,而不需要先执行redis-check-aof工具。
aof-load-truncated yes
# 加载redis时,可以识别AOF文件以“redis”开头字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes
################################ LUA SCRIPTING LUA脚本 ###############################
# 一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000。
lua-time-limit 5000
################################ REDIS CLUSTER Redis集群 ###############################
# 集群开关,默认是不开启集群模式
#
# cluster-enabled yes
# 集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动
# 配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系
# 统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf
# 节点互连超时的阀值。集群节点超时毫秒数
#
# cluster-node-timeout 15000
版权声明: 本文为 InfoQ 作者【陈皮的JavaLib】的原创文章。
原文链接:【http://xie.infoq.cn/article/d10b8c481a3de9a145e6b8da2】。未经作者许可,禁止转载。
陈皮的JavaLib
CSDN博客专家,微信搜一搜 - 陈皮的JavaLib 2020.02.22 加入
CSDN博客专家,专注各项技术领域的Java开发工程师,微信搜一搜【陈皮的JavaLib】,关注后学习更多技术文章和一线大厂面试资料和技术电子书籍。
评论