redis核心配置文件redis.conf各模块作用如下:
includes
![](https://img-blog.csdnimg.cn/img_convert/f8215300f580eb0ea791f9a5f94f44ab.png)
指定要在当前配置文件中包含的配置文件。这样做的目的主要是便于配置信息管理:可以将不同场景的配置都进行单独定义,然后在当前核心配置文件中根据不同场景选择包含进不同的配置文件。若想要引入的配置文件不受影响,你需要在配置文件最后一行引入你想要引入的配置文件。
modules
![](https://img-blog.csdnimg.cn/img_convert/705af24631d0a722528c3d379a29b866.png)
可通过加载不同的第三方模块,来增强、扩展Redis的功能。
network
![](https://img-blog.csdnimg.cn/img_convert/a213a29c1d83ec88e4daf5e752ca2a8a.png)
bind
![](https://img-blog.csdnimg.cn/img_convert/d08868eac53b289a1875440a5735171d.png)
指定可以访问当前 Redis 服务的客户端 IP,默认只允许本地访问,即当前 Redis 自己访问自己。为了使所有其它客户端都可访问,一般要将其注释掉。
protected-mode
![](https://img-blog.csdnimg.cn/img_convert/6245aa894788f234ee87c7ff45517246.png)
默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。
port
![](https://img-blog.csdnimg.cn/img_convert/19cbf77caed67811bf72fd715d0353f2.png)
Redis监听的连接端口号,默认为6379。
tcp-backlog
![](https://img-blog.csdnimg.cn/img_convert/11e628f54d937e2d4d34c14cf7919be9.png)
tcp-backlog 是一个 TCP 连接的队列,其主要用于解决高并发场景下客户端慢连接问题。这里设置的值就是这个队列的长度。该队列与 TCP 连接的三次握手有关。不同的 Linux 内核,backlog 队列中存放的元素(客户端连接)类型是不同的。
Linux 内核 2.2 版本之后 TCP 系统中维护了两个队列:SYN_RECEIVED 队列与 ESTABLISHED队列。SYN_RECEIVED 队列中存放的是未完成三次握手的连接,ESTABLISHED 队列中存放的是已完成三次握手的连接。此时的 backlog 就是 ESTABLISHED 队列。
查看Linux内核版本:
![](https://img-blog.csdnimg.cn/img_convert/b38cf09d37bf74225e7556779f3aa12d.png)
TCP 中的 backlog 队列的长度在 Linux 中由内核参数 somaxconn 来决定。所以,在 Redis中该队列的长度由 Redis 配置文件设置与 somaxconn 来共同决定:取它们中的最小值。
查看当前Linux内核中somaxconn的值
![](https://img-blog.csdnimg.cn/img_convert/c5bb037b61c1715b3b8e18c6d372631f.png)
生产环境下(特别是高并发场景下),backlog 的值最好要大一些,否则可能会影响系统
性能。
可修改/etc/sysctl.conf 文件,在文件最后添加如下内容:net.core.somaxconn=(需要设置的数值)
修改过后可以重启虚拟机,也可以执行sysctl -p来使新的修改生效。
timeout
![](https://img-blog.csdnimg.cn/img_convert/ba07a003c913fae9b94a225628529bb3.png)
空闲超时。当客户端与 Redis 间的空闲时间超过该时长后,连接自动断开。单位秒。默认值为 0,表示永远不超时(即会使用Tcp连接默认值2个小时,2个小时之后连接就会自动断开)
tcp-keepalive
![](https://img-blog.csdnimg.cn/img_convert/f3873575b5d4311a5e1a1a73e58f5e80.png)
该配置主要用于设置 Redis 检测与其连接的所有客户端的存活性时间间隔,单位秒。如上图,Redis是通过服务器每300秒向客户端发送检测来判断客户端是否存在,检测两次如果客户端都不在,连接就会断开。一般在空闲超时 timeout 设置为 0 时进行配置。
general
daemonize
![](https://img-blog.csdnimg.cn/img_convert/12f56d7b2b09a829e38a8812d99a8465.png)
该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。yes 是采用后台启动。
pidfile
![](https://img-blog.csdnimg.cn/img_convert/6c7d10db24522b300778c00bbac5b59a.png)
该配置用于指定 Redis 运行时 pid 写入的文件,无论 Redis 是否采用守护进程方式启动,pid 都会写入到该配置的文件。
注意,如果没有配置 pid 文件,不同的启动方式,pid 文件的产生效果是不同的:
1.采用守护进程方式启动(后台启动,daemonize 为 yes):pid 文件为/var/run/redis.pid。
2.采用前台启动(daemonize 为 no):不生产 pid 文件
loglevel
![](https://img-blog.csdnimg.cn/img_convert/557df322d68da5a81d8c3b7ab0b4c21f.png)
配置日志的级别。Redis 中共有四个级别,由低到高依次是:
debug:可以获取到很多的信息,一般在开发和测试时使用。
verbose:可以获取到很多不太有用的信息,但不像 debug 级别那么多。
notice:可以获取到在生产中想获取到的适当多的信息,默认级别。
warning:只记录非常重要/关键的信息。
logfile
![](https://img-blog.csdnimg.cn/img_convert/86149fb8a525077bad0b8ce1c822568d.png)
指定日志文件。如果设置为空串,则强制将日志记录到标准输出设备(显示器)。如果使用的是守护进程启动方式,设置为空串,则意味着会将日志发送到设备/dev/null(空设备)。
databases
![](https://img-blog.csdnimg.cn/img_convert/505ce122a3778e8d329a1cd2877b20ca.png)
设置数据库的数量。默认数据库是 0 号数据库。可以使用 select <dbid>在每个连接的基础上选择一个不同的数据库,其中 dbid 是介于 0 和'databases'-1'之间的数字。
security
用户设置 ACL 权限、Redis 访问密码相关配置。该模块中最常用的就是 requirepass 属性。
![](https://img-blog.csdnimg.cn/img_convert/e840a237d330e4fdbad9796314acf788.png)
设置客户端访问密码,注释后就没有密码
clients
![](https://img-blog.csdnimg.cn/img_convert/3c189f779b8566b2ed391ee16d2acb4b.png)
该模块用于设置与客户端相关的属性,其中仅包含一个属性 maxclients。
maxclients 用于设置 Redis 可并发处理的客户端连接数量,默认值为 10000。如果达到了该最大连接数,则会拒绝再来的新连接,并返回一个异常信息:已达到最大连接数。
注意,该值不能超过 Linux 系统支持的可打开的文件描述符最大数量阈值。查看该阈值的方式如下。修改该值,可以通过修改/etc/secutiry/limits.conf 文件。
![](https://img-blog.csdnimg.cn/img_convert/18f8abba97c08fb0f7fc1fdb4e621052.png)
memory management
![](https://img-blog.csdnimg.cn/img_convert/471a19d4935a0299b1161ec7786e14cc.png)
该配置可以控制最大可用内存及相关内容移除问题。
maxmemory
![](https://img-blog.csdnimg.cn/img_convert/579dbe8c8254b85fd77f1e44ec818123.png)
将内存使用限制设置为指定的字节数。当达到内存限制时,Redis 将根据选择的逐出策略 maxmemory-policy 尝试删除符合条件的 key。
如果不能按照逐出策略移除 key,则会给写操作命令返回 error,但对于只读的命令是没有影响的。
maxmamory-policy
![](https://img-blog.csdnimg.cn/img_convert/bc1b9f1913dcafc09fff1ebeb4f3ccfe.png)
该属性用于设置,当达到 maxmemory 时,Redis 将如何选择要移除的内容。当然,如果没有符合相应策略的内容要删除,则在执行写入命令时会给出 errors 的响应。
Redis 中共支持 8 种移除策略:
volatile-lru:使用近似 LRU 算法移除,仅适用于设置了过期时间的 key。
allkeys-lru:使用近似 LRU 算法移除,可适用于所有类型的 key。
volatile-lfu:使用近似 LFU 算法移除,仅适用于设置了过期时间的 key。
allkeys-lfu:使用近似 LFU 算法移除,可适用于所有类型的 key。
volatile-random:随机移除一个 key,仅适用于设置了过期时间的 key。
allkeys-random:随机移除一个 key,可适用于所有类型的 key。
volatile-ttl:移除距离过期时间最近的 key。
noeviction:不移除任何内容,只是在写操作时返回一个错误,默认值。
maxmemory-samples
![](https://img-blog.csdnimg.cn/img_convert/b6a46c652910ee79ea711eae75769d36.png)
该属性用于指定挑选要删除的 key 的样本数量。样本的选择采用的是 LRU 算法,该采用不能修改为其他的算法。然后再从样本中选择要移除的 key,此时采用的是 maxmamory-policy 指定的策略。
threaded I/O
该配置模块用于配置 Redis 对多线程 IO 模型的支持。
io-threads
![](https://img-blog.csdnimg.cn/img_convert/d2fbec5f40178fb9bb1523d39f65539c.png)
该属性用于指定要启用多线程 IO 模型时,要使用的线程数量。
io-threads-do-reads
![](https://img-blog.csdnimg.cn/img_convert/b8c3aa56e6c64bdde5217162bf517c01.png)
该属性用于启用多线程 IO 模型中的多线程处理读请求的能力。