详解redis配置文件

基础配置

查看配置文件位置

  • redis配置文件为redis.conf
  • 可以通过findwhereis命令查找文件路径位置
[root@server ~]# find / -name redis.conf
/etc/redis.conf

或

[root@server ~]# whereis redis.conf
redis.conf: /etc/redis.conf

启动redis时,指定加载的配置文件

[root@server ~]# cat /etc/redis.conf 
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf    #redis服务启动时,需要加载的配置文件

示例

  • 比如/etc/redis.conf配置文件参数不动,我把该文件cp/usr/目录下,修改/usr/redis.conf配置文件的参数(比如设置密码,默认没有密码),在启动redis服务时指定/usr/redis.conf这个配置文件,那么在用客户端连接服务端时,需要输入密码。反之,指定用/etc/redis.conf配置文件启动服务,则不需要输入密码就可以连接服务端。
  • 启动redis时,指定加载的配置文件为/usr/redis.cong
[root@server ~]# vim /etc/redis.conf 
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
./redis-server  /usr/redis.conf
  • 重启redis服务时,会加载/usr/redis.conf这个配置文件

include引用其他配置文件

在这里插入图片描述

  • include可以指定引用其他位置配置文件
  • 若被include引用的配置文件里的参数redis.conf里的参数相同的,想要实现加载被引用配置文件里的参数,则需要将include这一行放在redis.conf配置文件里相同参数后面一行中
  • 通俗得讲:后面进行include的文件会覆盖前面已经加载过的文件
  • 重启生效

units单位大小写不敏感

在这里插入图片描述

  • units:单位
  • 定义内存的基本度量单位只支持bytes不支持bit不区分大小写,所以1Gb 1gB 1GB都是相同的

可用的单位

  • 1k:表示1000字节(注意这里的“k”是千的意思,不是千字节,即不是1KB)。
  • 1kb:表示1024字节,即1千字节(KB)。
  • 1m:表示1000000字节。
  • 1mb:表示1024*1024字节,即1兆字节(MB)。
  • 1g:表示1000000000字节。
  • 1gb:表示1024*1024*1024字节,即1吉字节(GB)。

network网络配置

bind

在这里插入图片描述

[root@server ~]# cat /etc/redis.conf | grep bind
bind 127.0.0.1 -::1
  • 默认情况下 bind=127.0.0.1 只能接受本机的访问请求。在不写的情况下,无限制接受任何 IP 地址访问
  • 外部要连接服务端,可以用通配符*,即bind *
  • 通过设置bind指令,可以控制哪些IP地址可以接受到Redis服务器的连接请求。

配置方式

  • bind指令接受一个多个IP地址作为参数,多个IP地址之间使用空格分隔。
  • 例如:bind 127.0.0.1 192.168.1.100,这表示Redis服务器将同时绑定在本地回环接口IP地址为192.168.1.100的网络接口上。,允许本机192.168.1.100的主机访问

示例

  • 允许来自本地主机的连接请求(默认配置):bind 127.0.0.1
  • 允许来自指定IP地址(如192.168.1.100)的连接请求:bind 192.168.1.100
  • 允许来自任何IP地址的连接请求(不推荐,存在安全风险):bind 0.0.0.0bind *

protected-mode

在这里插入图片描述

  • 是否开启保护模式。如配置里没有指定bind密码开启该参数后redis只允许本地访问拒绝外部访问推荐设置no
[root@server ~]# cat /etc/redis.conf | grep protected-mode
protected-mode yes

功能概述

  • protected-mode设置为yes时,Redis将在没有密码和没有绑定到特定IP地址的情况下,仅允许来自本地环境的连接(即只接受来自localhost127.0.0.1的连接)。
  • 设置为no时,Redis不会实施此本地连接限制

配置方法

  • 你可以通过编辑Redis的配置文件(通常是redis.conf)来修改protected-mode的值。
# 默认配置可能是这样的
protected-mode yes

# 如果你想禁用protected-mode,可以将其更改为
protected-mode no

port

在这里插入图片描述

  • port ,默认端口是6379。如果指定0端口,表示Redis不监听TCP连接

tcp-backlog

在这里插入图片描述

  • 设置tcpbacklogbacklog其实是一个连接队列backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列
  • 高并发环境下你需要一个高backlog值来避免慢客户端连接问题
[root@server ~]# cat /etc/redis.conf | grep tcp-backlog
tcp-backlog 511

1. 定义

tcp-backlog 是一个连接队列,这个队列包含了等待与 Redis 服务器建立连接的客户端套接字。在高并发环境下,设置一个较高的backlog值可以帮助避免慢客户端连接问题。

2. 默认值

Redis 的默认配置中,tcp-backlog 的值通常是 511。然而,这个值必须小于等于 Linux 系统定义的 /proc/sys/net/core/somaxconn值/proc/sys/net/ipv4/tcp_max_syn_backlog值两个值默认大小通常是128

3. 优化建议

  • 调整 tcp-backlog:对于负载很大服务程序,可以将 tcp-backlog 的值调整为 2048更大。这有助于在高并发环境下提高 Redis性能
  • 调整 somaxconn:由于 tcp-backlog 的值不能超过 /proc/sys/net/core/somaxconn,因此你可能还需要调整这个内核参数。你可以通过编辑 /etc/sysctl.conf文件并添加 net.core.somaxconn = 2048 来实现这一点,然后执行 sysctl -p 使更改生效
  • 调整 tcp_max_syn_backlog :由于 tcp-backlog 的值不能超过 /proc/sys/net/ipv4/tcp_max_syn_backlog,因此你可能还需要调整这个内核参数。你可以通过编辑 /etc/sysctl.conf 文件并添加 net.ipv4.tcp_max_syn_backlog = 1024来实现这一点,然后执行 sysctl -p 使更改生效

timeout

在这里插入图片描述

  • 连接超时时间单位秒,超过timeout服务端断开连接,为0服务端不会主动断开连接不能小于0
[root@server ~]# cat /etc/redis.conf | grep timeout
timeout 0

1. 定义与功能

  • 定义timeout参数指定了客户端连接在没有任何操作的情况下Redis服务器等待客户端活动的最大时间(以为单位)
  • 功能当客户端连接在指定的超时时间内没有进行任何操作时,Redis服务器会自动断开该连接。这有助于避免无效的连接长时间占用服务器资源提高服务器并发处理能力

2. 默认值与设置方法

  • 默认值:默认情况下,timeout的值为0,表示Redis服务器不会主动断开空闲的客户端连接
  • 设置方法
    1. Redis的配置文件(通常是redis.conf)中,可以通过添加或修改timeout参数来设置超时时间。例如,timeout 300表示设置超时时间为300秒(5分钟)
    2. 也可以在启动Redis服务器的命令中直接添加--timeout参数来设置超时时间。例如,redis-server --timeout 300表示在启动Redis服务器时设置超时时间为300秒(5分钟)

tcp-keepalive

在这里插入图片描述

  • 访问客户端的一种心跳检测每n秒检测一次
  • 单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60
[root@server ~]# cat /etc/redis.conf | grep tcp-keepalive
tcp-keepalive 300

Redis配置文件中,tcp-keepalive参数用于设置TCP连接的保活策略。以下是关于tcp-keepalive参数的详细解释:

定义与功能

  • 定义tcp-keepalive参数允许Redis服务器定期向空闲的客户端发送TCP心跳包,以检测网络连通性
  • 功能
    1. 检测网络异常:如果网络出现异常,服务器可以尽快清理“僵尸”连接,释放系统资源。
    2. 保持连接活跃:通过发送心跳包确保连接保持活跃状态,防止因长时间无操作而被错误地断开。

TLS/SSL

  • 作用数据连接加密配置

general通用类

  • 作用一些通用的配置

daemonize守护进程(后台进程

  • 是否为后台进程,即守护进程,用于后台启动,设置为yes
    在这里插入图片描述
[root@server ~]# cat /etc/redis.conf | grep daemonize
daemonize yes

定义与功能

  • 定义daemonize是一个配置选项,用于指定Redis是否应以守护进程(后台进程)的形式运行。
  • 功能
    • daemonize设置为yes时,Redis服务器将在后台运行,并将进程ID(PID)写入到由pidfile配置项指定的文件中
    • daemonize设置为no时,Redis将在当前终端会话中作为前台进程运行

pidfile

  • 存放pid文件位置每个实例产生一个不同的pid文件

在这里插入图片描述

[root@server ~]# cat /etc/redis.conf | grep pidfile
pidfile /var/run/redis_6379.pid

Redis配置文件中的pidfile是一个非常重要的配置项,它用于指定Redis进程的PID(进程ID)文件路径。以下是关于pidfile的详细解释:

定义与功能

  • 定义pidfileRedis配置文件中的一个参数,用于定义Redis服务器进程ID(PID)的文件路径。
  • 功能:当Redis服务器启动时,它会将自己的PID写入到由pidfile指定的文件中。这个文件是一个文本文件,内容仅包含Redis进程的PID。通过读取这个文件,系统管理员或其他工具可以轻松地获取Redis进程的PID,进而进行监控、管理或操作

logfile

在这里插入图片描述

  • 日志文件名称
  • logfile默认为空,则将日志打印在屏幕上,不输出成文件。也可以指定文件位置,这样服务运行时只会把日志输入到指定文件里
[root@server ~]# cat /etc/redis.conf | grep logfile
logfile ""

定义与功能

  • 定义logfileRedis配置文件中指定日志文件存储路径和名称的配置项。
  • 功能:通过配置logfileRedis服务器可以将重要的运行事件错误信息记录指定的日志文件中。这些日志信息对于了解Redis服务器运行状态进行故障排查调优等操作非常有帮助
  • 如果logfile被设置为空字符串Redis将把日志信息输出到标准输出(stdout)。但是,如果Redis是以守护进程(daemon)方式运行的,标准输出将被重定向/dev/null,即不会保存任何日志信息
logfile /var/log/redis/redis-server.log

在这个例子中,Redis的日志文件将被写入到/var/log/redis/redis-server.log文件中

loglevel

在这里插入图片描述

指定日志记录级别Redis总共支持四个级别

  • debug存储很多信息方便开发测试
  • verbose同上,但是没有debug级别信息多
  • notice适当日志级别,适合生产环境默认
  • warning只记录非常重要/关键消息

四个级别根据使用阶段选择生产环境选择notice或者warning

[root@server ~]# cat /etc/redis.conf | grep loglevel
loglevel notice
  • Redis配置文件中的loglevel参数用于设置Redis服务器的日志级别,决定了Redis何种情况下输出日志信息。以下是关于loglevel的详细解释:

日志级别

Redis支持以下几种日志级别(按详细程度高到低排序):

  • debug最详细的日志级别,适用于开发和调试阶段。会记录大量的信息,包括各种操作和内部状态变化
  • verbose较为详细的日志级别,适用于追踪Redis的行为。会记录一些有用的信息,但不像debug级别那样详细
  • notice普通级别的日志,适用于记录Redis的常规操作。通常只记录一些重要的、需要管理员注意的事件
  • warning警告级别的日志,适用于记录一些潜在的问题或异常情况。这些信息可能表示某些配置不当或系统性能问题

databases

设定库的数量,默认16默认数据库0,可以使用SELECT <dbid>命令在连接上指定数据库id

在这里插入图片描述

[root@server ~]# cat /etc/redis.conf | grep databases
databases 16

security安全类

通过redis命令行设置密码

[root@server ~]# redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""        #密码为空
127.0.0.1:6379> config set requirepass 123456    #设置密码为123456
OK
127.0.0.1:6379> config get requirepass  #查看密码
1) "requirepass"
2) "123456"   #密码为123456
127.0.0.1:6379> exit
[root@server ~]# redis-cli
127.0.0.1:6379> ping    #没有进行密码认证,不允许任何操作
(error) NOAUTH Authentication required.
127.0.0.1:6379> config get requirepass   #没有进行密码认证,不允许任何操作
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456   #进行密码认证
OK     #认证成功
127.0.0.1:6379> ping    #认证成功后可以进行操作
PONG
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> exit
[root@server ~]# systemctl restart redis  #重启redis服务
[root@server ~]# redis-cli
127.0.0.1:6379> ping    #发现重启后,之前设置的密码失效
PONG
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
  • 命令中设置密码,只是临时的。重启redis服务器,密码就还原了

通过配置文件requirepass设置密码

在这里插入图片描述

  • Redis配置文件中,requirepass 指令用于设置Redis服务器密码,以要求客户端在尝试进行身份验证之前提供密码

配置细节

  1. 位置requirepass 通常位于 Redis 配置文件(通常是 redis.conf)中。
  2. 设置密码:要设置密码,只需在 requirepass 后面添加密码即可。例如,要设置密码为 mysecret,你可以这样做:
requirepass mysecret
  1. 重启 Redis:更改配置文件后,你需要重启 Redis 服务器以使更改生效。
  2. 安全性:确保密码是强密码,并妥善保管。不要在代码中或任何公共位置硬编码密码。

使用密码进行身份验证

Redis 服务器设置了密码后,客户端需要使用 auth 命令进行身份验证。这通常在客户端连接后立即进行。

例如,使用 redis-cli 客户端连接到设置了密码的Redis服务器时,你需要这样做:

[root@server ~]# redis-cli -a mysecret

或者,在连接后使用AUTH命令:

[root@server ~]# redis-cli
127.0.0.1:6379> AUTH mysecret
OK

示例

[root@server ~]# vim /etc/redis.conf
requirepass 123456  #在配置文件中,设置密码为123456

[root@server ~]# systemctl restart redis   #重启redis服务
[root@server ~]# redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456   #需要进行密码认证
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
[root@server ~]# systemctl restart redis  #重启redis服务
[root@server ~]# redis-cli
127.0.0.1:6379> ping    #没有进行密码认证
(error) NOAUTH Authentication required.
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456   #进行密码认证
OK
127.0.0.1:6379> config get requirepass  #查看密码
1) "requirepass"
2) "123456"   #密码
127.0.0.1:6379> 
  • 通过配置文件实现永久设置

clients限制类

maxclients

在这里插入图片描述

[root@server ~]# cat /etc/redis.conf | grep maxclients
# maxclients 10000
  • 设置最大客户端连接数量
  • maxclients默认关闭状态,可以设置客户端的最大连接数超过这个数值的第n+1个用户开始就连接不了服务端。
  • 如果达到了此限制redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应

maxmemory

在这里插入图片描述

  • maxmemory默认没有设置
  • 建议必须设置,否则可能导致将内存占满,造成服务器宕机
[root@server ~]# cat /etc/redis.conf | grep maxmemory
# maxmemory <bytes>
  • 设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据移除规则可以通过maxmemory-policy来指定
  • 如果redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH
  • 但是对于无内存申请的指令,仍然会正常响应,比如GET等。
  • 如果你的redis主redis说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,就不用考虑这个因素

Redis 的配置文件中(通常是 redis.conf),maxmemory 指令用于设置 Redis 实例可以使用的最大内存量(以字节为单位)。一旦Redis 使用的内存达到这个限制,Redis 就会根据配置的淘汰策略eviction policy)来删除一些键,以便为新的数据腾出空间。

示例配置:

# 设置最大内存限制为 4GB
maxmemory 4gb

你也可以使用其他单位,如 k(千字节)、m(兆字节)和 g(吉字节)。

注意事项:

  1. 合理设置:你需要根据你的服务器总内存Redis 实例的用途来合理设置 maxmemory。设置得太小可能会导致 Redis 过早地开始淘汰键,而设置得太大则可能耗尽系统资源。

  2. 淘汰策略:当 Redis 达到 maxmemory 限制时,它会根据配置的淘汰策略删除一些键。你可以使用 maxmemory-policy 指令来设置淘汰策略。可用的策略包括:

    • volatile-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU数据淘汰只针对设置了过期时间的键
    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU数据淘汰针对所有key
    • volatile-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU数据淘汰只针对设置了过期时间的键
    • allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU数据淘汰针对所有key
    • volatile-random:当内存不足以容纳新写入数据时,随机选择键淘汰只对设置了过期时间的键
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中随机选择键淘汰针对所有key
    • volatile-ttl:当内存不足以容纳新写入数据时,选择剩余时间(TTL)最短的键淘汰针对那些快要过期的key
    • noeviction:当内存不足以容纳新写入数据时,不进行移除针对写操作只是返回错误信息

    你可以通过配置 maxmemory-policy 来选择最适合应用需求淘汰策略

maxmemory-policy

在这里插入图片描述

[root@server ~]# cat /etc/redis.conf | grep maxmemory-policy
# maxmemory-policy noeviction

Redis的配置文件中,maxmemory-policy用于配置当Redis实例使用的内存达到maxmemory限制时,系统应采取何种策略释放内存空间。以下是关于maxmemory-policy的详细解释:

作用

  • maxmemory-policy定义了当Redis使用的内存达到maxmemory限制时,如何选择要淘汰的键(key)以释放内存

可选策略

  • volatile-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU数据淘汰只针对设置了过期时间的键
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU数据淘汰针对所有key
  • volatile-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU数据淘汰只针对设置了过期时间的键
  • allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU数据淘汰针对所有key
  • volatile-random:当内存不足以容纳新写入数据时,随机选择键淘汰只对设置了过期时间的键
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中随机选择键淘汰针对所有key
  • volatile-ttl:当内存不足以容纳新写入数据时,选择剩余时间(TTL)最短的键淘汰针对那些快要过期的key
  • noeviction:当内存不足以容纳新写入数据时,不进行移除针对写操作只是返回错误信息

maxmemory-samples

在这里插入图片描述

  • 用于设置样本数量LRU算法最小TTL算法并非是精确的算法,而是估算值,所以你可以设置样本的大小redis默认检查这么多个key并选择其中LRU的那个
  • 一般设置3到7数字数值越小样本越不准确,但性能消耗越小
[root@server ~]# cat /etc/redis.conf | grep maxmemory-samples
# maxmemory-samples 5

作用

  • maxmemory-samples 定义了 Redis 在执行淘汰策略时,为了估算键的使用情况而应检查的样本数量。对于LFULeast Frequently Used最近最不常使用)策略,这个值用于计算键的访问频率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^~^前行者~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值