一、引言@H_301_4@
写完上一篇有关redis使用lua脚本的文章,就有意结束Redis这个系列的文章了,当然了,这里的结束只是我这个系列的结束,但是要学的东西还有很多。但是,好多天过去了,总是感觉好像还缺点什么。突然眼前一亮,明白了,写了这么多关于Redis的文章,居然还没有写它的配置文件是如何配置管理的,这样可不行,做事要有始有终吧,决定再写一篇,作为Redis系列的结尾篇,也就是今天的这篇文章。好了,我们开始今天的讨论吧。
二、redis.conf配置详解@H_301_4@
我把redis.conf的配置文件整体翻译一下,把个人的理解也融入其中,其实文件的内容大多数都很熟悉,也都用过,所以不是很难,大家使用一遍,是很容易理解的。由于个人能力有限,翻译的也有可能有误,希望高手能够指正。
1@H_301_4@ # Redis 配置文件示例。
@H_301_4@ 2@H_301_4@ #
@H_301_4@ 3@H_301_4@ # 请注意,为了读取配置文件,Redis必须以文件路径作为第一个参数来启动:
@H_301_4@ 4@H_301_4@ 5@H_301_4@ # ./redis-server /path/to/redis.conf
@H_301_4@ 6@H_301_4@
7@H_301_4@ # 关于单位的注意事项:当需要内存大小时,可以使用1k 5GB 4M等常用的形式指定它,如下所示:
@H_301_4@ 8@H_301_4@ 9@H_301_4@ # 1k => 1000@H_301_4@ bytes
@H_301_4@ 10@H_301_4@ # 1kb => 1024@H_301_4@ 11@H_301_4@ # 1m => 1000000@H_301_4@ 12@H_301_4@ # 1mb => 1024@H_301_4@* 13@H_301_4@ # 1g => 1000000000@H_301_4@ 14@H_301_4@ # 1gb => 15@H_301_4@ 16@H_301_4@ # 单位不区分大小写,所以1GB 1Gb 1gB都是一样的。
@H_301_4@ 17@H_301_4@
18@H_301_4@ ################################## INCLUDES ###################################
@H_301_4@ 19@H_301_4@
20@H_301_4@ # 在该选项里可以配设置包含的文件,可以包含一个或多个其他配置文件。假如您有一个可用于大多数Redis服务器标准模板的配置文件,但是又需要针对少数比较特殊的Redis服务器编写一些自定义的配置,这种情况使用此功能就是非常有用的。
@H_301_4@ 21@H_301_4@ 22@H_301_4@ # 注意“include”选项不会被来自admin或Redis Sentinel的命令“CONFIG REWRITE”重写。 由于Redis总是使用最后一条处理过的行作为配置指令的值,因此最好将include包含在此文件的开头,以避免在运行时覆盖配置更改。
@H_301_4@ 23@H_301_4@ 24@H_301_4@ # 如果您有兴趣使用includes来覆盖配置选项,则最好使用include作为最后一行。
@H_301_4@ 25@H_301_4@ 26@H_301_4@ # include /path/to/local.conf
@H_301_4@ 27@H_301_4@ # include /path/to/other.conf
@H_301_4@ 28@H_301_4@
29@H_301_4@ ################################## MODULES #####################################
@H_301_4@ 30@H_301_4@
31@H_301_4@ # 启动时加载模块。如果服务器无法加载模块,则会中止运行。 可以使用多个loadmodule指令。
@H_301_4@ 32@H_301_4@ 33@H_301_4@ # loadmodule /path/to/my_module.so
@H_301_4@ 34@H_301_4@ # loadmodule /path/to/other_module.so
@H_301_4@ 35@H_301_4@
36@H_301_4@ ################################## NETWORK #####################################
@H_301_4@ 37@H_301_4@
38@H_301_4@ # 默认情况下,如果没有指定“bind”配置指令,则Redis监听来自服务器上可用的所有网络接口的连接。 可以使用“bind”配置指令监听一个或多个选定的接口,然后使用一个或多个IP地址。
@H_301_4@ 39@H_301_4@ 40@H_301_4@ # 示例:
@H_301_4@ 41@H_301_4@ 42@H_301_4@ # bind 192.168@H_301_4@.1.100@H_301_4@ 10.0@H_301_4@.0.1@H_301_4@
43@H_301_4@ # bind 127.0@H_301_4@.0.1@H_301_4@ ::1@H_301_4@
44@H_301_4@ 45@H_301_4@ # ~~~警告~~~如果运行Redis的计算机直接暴露在互联网上,绑定到所有接口是危险的,并会将实例暴露给互联网上的每个人。 因此,默认情况下,我们取消注释以下绑定指令,这将强制Redis仅侦听IPv4回溯接口地址(这意味着Redis将只能接受与运行在同一台计算机上的客户端的连接)。
@H_301_4@ 46@H_301_4@ 47@H_301_4@ # 如果您确定您希望您的实例能够监听所有接口,只需对以下代码进行注释即可。
@H_301_4@ 48@H_301_4@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49@H_301_4@ bind 50@H_301_4@
51@H_301_4@ # 保护模式是一层安全保护措施,以避免在互联网上保持打开的Redis实例被访问和利用。
@H_301_4@ 52@H_301_4@ 53@H_301_4@ # 当保护模式打开时,如果:
@H_301_4@ 54@H_301_4@ 55@H_301_4@ # 1@H_301_4@) 服务器没有使用“绑定”指令显式绑定到一组地址。
@H_301_4@ 56@H_301_4@ # 2@H_301_4@) 没有配置密码。
@H_301_4@ 57@H_301_4@ 58@H_301_4@ # 服务器只接受来自IPv4和IPv6环回地址127.0.0@H_301_4@.1和:: 1以及来自Unix域套接字的客户端的连接。
@H_301_4@ 59@H_301_4@ 60@H_301_4@ # 默认情况下启用保护模式。 只有当你确定你希望来自其他主机的客户端连接到Redis时,即使没有配置认证,
@H_301_4@ 61@H_301_4@ 也没有使用“bind”指令明确列出一组特定的接口,你应该禁用它。
@H_301_4@ 62@H_301_4@ protected@H_301_4@-mode yes
@H_301_4@ 63@H_301_4@
64@H_301_4@ # 只接受指定端口上的连接,默认值为6379(IANA#815344@H_301_4@)。 如果指定端口0,则Redis不会侦听TCP套接字。
@H_301_4@ 65@H_301_4@ port 6379@H_301_4@
66@H_301_4@
67@H_301_4@ # TCP listen() backlog.
@H_301_4@ 68@H_301_4@ 69@H_301_4@ # 在高并发的环境中,您需要高积压以避免缓慢的客户端连接问题。 请注意,Linux内核会将其自动截断为/proc/ sys/net/core/somaxconn 的值,因此请确保同时提高 somaxconn 和 tcp_max_syn_backlog 的值以获得所需的效果。
@H_301_4@ 70@H_301_4@
71@H_301_4@ tcp-backlog 511@H_301_4@
72@H_301_4@
73@H_301_4@ # Unix 套接字
@H_301_4@ 74@H_301_4@ 75@H_301_4@ # 指定将用于侦听传入连接的Unix套接字的路径。 没有默认设置,因此Redis在未指定时不会在unix套接字上侦听。
@H_301_4@ 76@H_301_4@ 77@H_301_4@ # unixsocket /tmp/redis.sock
@H_301_4@ 78@H_301_4@ # unixsocketperm 700@H_301_4@
79@H_301_4@
80@H_301_4@ # 客户端空闲N秒后关闭连接(0禁用)
@H_301_4@ 81@H_301_4@ timeout 0@H_301_4@
82@H_301_4@
83@H_301_4@ # TCP keepalive.
@H_301_4@ 84@H_301_4@ 85@H_301_4@ # 如果非零,则在没有通信的情况下使用SO_KEEPALIVE向客户端发送TCP ACK。这是有用的,原因有两个:
@H_301_4@ 86@H_301_4@ 87@H_301_4@ # ) 检测不在线的节点
@H_301_4@ 88@H_301_4@ # ) 从中间网络设备的角度来看,连接是活着的。
@H_301_4@ 89@H_301_4@ 90@H_301_4@ # 在Linux上,指定的值(以秒为单位)是用于发送ACK的时间段。
@H_301_4@ 91@H_301_4@ # 请注意,要关闭连接,需要两倍的时间。
@H_301_4@ 92@H_301_4@ # 在其他内核上,时间取决于内核配置。
@H_301_4@ 93@H_301_4@ 94@H_301_4@ # 此选项的合理值为300秒,这是从Redis 3.2@H_301_4@.1开始的新Redis默认值。
@H_301_4@ 95@H_301_4@ tcp-keepalive 300@H_301_4@
96@H_301_4@
97@H_301_4@ ################################ GENERAL #####################################
@H_301_4@ 98@H_301_4@
99@H_301_4@ #是否在后台执行,yes:后台运行;no:不是后台运行(老版本默认)
@H_301_4@100@H_301_4@ daemonize yes
@H_301_4@101@H_301_4@
102@H_301_4@ #3@H_301_4@.2里的参数,是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码 和bind,可以开启。否 则最好关闭,设置为no。
@H_301_4@103@H_301_4@ 104@H_301_4@ #redis的进程文件
@H_301_4@105@H_301_4@ pidfile /var@H_301_4@/run/redis/redis-server.pid
@H_301_4@106@H_301_4@
107@H_301_4@ #redis监听的端口号。
@H_301_4@108@H_301_4@ port 109@H_301_4@
110@H_301_4@ #此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048@H_301_4@,然后在终端中执行sysctl -p。
@H_301_4@111@H_301_4@ tcp-backlog 112@H_301_4@
113@H_301_4@ #指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
@H_301_4@114@H_301_4@ bind 115@H_301_4@
116@H_301_4@ #配置unix socket来让redis支持监听本地连接。
@H_301_4@117@H_301_4@ # unixsocket /var@H_301_4@/run/redis/118@H_301_4@ #配置unix socket使用文件的权限
@H_301_4@119@H_301_4@ # unixsocketperm 120@H_301_4@
121@H_301_4@ # 此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0。
@H_301_4@122@H_301_4@ timeout 123@H_301_4@
124@H_301_4@ #tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。
@H_301_4@125@H_301_4@ tcp-keepalive 126@H_301_4@
127@H_301_4@ #指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)
@H_301_4@128@H_301_4@ loglevel notice
@H_301_4@129@H_301_4@
130@H_301_4@ #指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null@H_301_4@。
@H_301_4@131@H_301_4@ logfile /var@H_301_4@/log/redis/redis-server.log
@H_301_4@132@H_301_4@
133@H_301_4@ #是否打开记录syslog功能
@H_301_4@134@H_301_4@ # syslog-enabled no
@H_301_4@135@H_301_4@
136@H_301_4@ #syslog的标识符。
@H_301_4@137@H_301_4@ # syslog-ident redis
@H_301_4@138@H_301_4@
139@H_301_4@ #日志的来源、设备
@H_301_4@140@H_301_4@ # syslog-facility local0
@H_301_4@141@H_301_4@
142@H_301_4@ #数据库的数量,默认使用的数据库是DB 0@H_301_4@。可以通过”SELECT “命令选择一个db
@H_301_4@143@H_301_4@ databases 16@H_301_4@
144@H_301_4@
145@H_301_4@ ################################ SNAPSHOTTING ################################
@H_