详解redis配置文件

华子目录

基础配置

查看配置文件位置

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

或

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

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

bash 复制代码
[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
bash 复制代码
[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:单位
  • 指定的单位可以是大写,小写(单位不区分大小写,所以1Gb 1gB 1GB都是相同的。)。并支持的度量单位为bytes,不支持bit

在Redis的配置文件(通常是redis.conf)中,units部分定义了用于配置文件中各种大小参数的度量单位。这些单位在配置Redis内存大小缓冲区大小等参数时非常有用。以下是对units单位的详细解释:

  1. 基本单位

    • 所有的大小单位都基于字节(bytes)。
  2. 可用的单位

    • 1k:表示1000字节(注意这里的"k"是千的意思,不是千字节,即不是1KB)。
    • 1kb:表示1024字节,即1千字节(KB)。
    • 1m:表示1000000字节。
    • 1mb:表示1024*1024字节,即1兆字节(MB)。
    • 1g:表示1000000000字节。
    • 1gb:表示1024*1024*1024字节,即1吉字节(GB)。
  3. 单位的大小写敏感性

    • Redis对单位的大小写是不敏感的,因此1GB1Gb1gB都被视为相同的单位。
  4. 用途

    • 这些单位常用于配置Redis的内存相关参数,如maxmemory(用于设置Redis实例能够使用的最大内存量)等。
  5. 示例

    • 如果你想将Redis的最大内存限制设置为1GB,你可以在配置文件中使用maxmemory 1gbmaxmemory 1073741824(直接以字节为单位指定)。
  6. 注意事项

    • 当在配置文件中使用这些单位时,请确保单位与数字之间没有空格。例如,1 gb是无效的,而1gb是有效的。

综上所述,units部分在Redis配置文件中定义了用于指定大小参数的度量单位,并允许用户以人类可读的方式(如KB、MB、GB)来配置Redis的大小参数,而不是直接使用字节数。

network网络配置

bind

bash 复制代码
[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

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep protected-mode
protected-mode yes
  • protected-mode ,默认是开启状态,一般不需要修改,可以保证服务的安全性

Redis的配置文件中,protected-mode是一个重要的安全选项,用于在Redis没有配置密码(即requirepass指令未设置)且没有绑定到特定IP地址(即bind指令为空或仅绑定了127.0.0.1)时,限制对Redis服务器的访问。

功能概述

  • protected-mode设置为yes时,Redis将在没有密码和没有绑定到特定IP地址的情况下,仅允许来自本地环境的连接(即只接受来自localhost127.0.0.1的连接)。
  • 设置为no时,Redis不会实施此本地连接限制,但请注意,这可能会增加安全风险,特别是当Redis没有设置密码时。

默认值

  • Redis的默认配置中,protected-mode通常被设置为yes

配置方法

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

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

安全建议

  • 始终建议为Redis设置一个强密码,并使用requirepass指令在配置文件中进行配置。
  • 如果可能的话,使用bind指令将Redis绑定到特定的IP地址或接口,以减少潜在的攻击面。
  • 在生产环境中,考虑使用防火墙或其他网络安全工具来进一步限制对Redis服务器的访问。
  • 禁用protected-mode之前,请确保你已经采取了其他安全措施来保护Redis服务器。

总结

protected-modeRedis提供的一个基本安全特性,用于在Redis没有配置密码和没有绑定到特定IP地址时,限制对Redis服务器的访问。虽然它不是一个全面的安全解决方案,但它可以增加一层额外的保护,特别是在开发和测试环境中。然而,在生产环境中,你应该始终考虑使用更强大的安全措施来保护Redis服务器。

port

  • port ,默认端口是6379

  • Redis 的配置文件中,port 参数用于指定 Redis 服务器应该监听的 TCP 端口号。默认情况下,Redis 使用端口号 6379

  • 如果你查看 Redis 的配置文件(通常位于 /etc/redis/redis.conf/usr/local/etc/redis/redis.conf具体取决于你的安装方式和操作系统),你会找到类似这样的行:

bash 复制代码
port 6379
  • 这表示 Redis 服务器正在监听 TCP 端口 6379 上的连接。

  • 如果你想要更改 Redis 服务器监听的端口,只需编辑配置文件中的 port 行,将其更改为你想要的新端口号,然后重启 Redis 服务即可。例如,如果你想要 Redis 监听端口 7000,则应将配置文件中的 port 行更改为:

bash 复制代码
port 7000
  • 然后保存配置文件并重启 Redis 服务。注意,更改端口后,你需要使用新的端口号来连接 Redis 服务器。

tcp-backlog

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep tcp-backlog
tcp-backlog 511
  • Redis 的配置文件中,tcp-backlog 参数用于设置 TCP 连接的监听队列大小。以下是关于 tcp-backlog 的详细解释:

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 使更改生效。

4. 注意事项

  • 在调整这些参数时,请确保了解它们的工作原理,并根据你的具体需求进行配置。
  • 修改配置文件后,需要重启 Redis 服务以使更改生效。

5. 总结

tcp-backlogRedis 配置文件中用于设置 TCP 连接监听队列大小的重要参数。在高并发环境下,合理设置这个参数可以提高 Redis 的性能。同时,还需要注意与 Linux 系统的 somaxconn 参数和tcp_max_syn_backlog进行配合调整。

timeout

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep timeout
timeout 0

Redis的配置文件中,timeout参数用于设置客户端连接的超时时间。以下是关于timeout参数的详细解释:

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分钟)。

3. 注意事项

  • 合理设置timeout参数可以根据实际需求减少连接断开和重新连接的频率,提高系统的稳定性和性能。
  • 修改timeout参数后,需要重启Redis服务器才能使新的设置生效。
  • timeout设置为0时,Redis服务器将不会主动断开空闲的客户端连接,这可能会导致服务器资源被无效连接长时间占用。因此,在生产环境中,建议根据实际需求设置一个合适的超时时间。

4. 总结

timeout参数是Redis配置文件中用于设置客户端连接超时时间的重要参数。通过合理设置该参数,可以避免无效连接长时间占用服务器资源,提高Redis服务器的并发处理能力和稳定性。

tcp-keepalive

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep tcp-keepalive
tcp-keepalive 300

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

定义与功能

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

默认值与设置方法

  • 设置方法
    1. Redis的配置文件(通常是redis.conf)中,可以添加或修改tcp-keepalive参数来设置心跳检测的时间间隔(以秒为单位)。例如,tcp-keepalive 60表示Redis服务器将每隔60秒向空闲的客户端发送一次TCP心跳包。
    2. 单位为,如果设置为0,则不会进行 Keepalive 检测,建议设置成 60
    3. 注意,在某些系统中,tcp-keepalive可能只在Linux等操作系统上生效,而在其他系统(如Mac)上则可能无效或依赖于系统内核的默认设置。

注意事项

  • 合理配置 :根据网络环境和业务需求,合理配置tcp-keepalive参数。如果设置得过低,可能会增加服务器的负载和网络带宽的使用;如果设置得过高,可能无法及时检测到网络异常。
  • 依赖系统 :由于tcp-keepalive可能依赖于操作系统的默认设置,因此在修改Redis配置文件后,可能需要检查系统级的TCP保活设置,以确保Redistcp-keepalive参数能够正常工作。
  • 其他参数 :除了tcp-keepalive外,Redis还提供了其他与网络连接相关的参数,如tcp-backlogtimeout等。这些参数可以共同影响Redis的网络性能和稳定性,因此也需要进行合理配置。

总结

tcp-keepaliveRedis配置文件中用于设置TCP连接保活策略的重要参数。通过合理配置该参数,可以确保Redis服务器能够及时检测到网络异常并清理无效连接,从而提高系统的稳定性和性能。在配置时需要注意参数的值、系统依赖以及其他相关参数的影响。

general通用类

daemonize守护进程(后台进程

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep daemonize
daemonize yes

Redis的配置文件中,daemonize参数用于控制Redis服务器是否以守护进程(后台进程)的方式运行。以下是关于daemonize参数的详细解释:

定义与功能

  • 定义daemonize是一个配置选项,用于指定Redis是否应以守护进程(后台进程)的形式运行。
  • 功能
    • daemonize设置为yes时,Redis服务器将在后台运行,并将进程ID(PID)写入到由pidfile配置项指定的文件中。
    • daemonize设置为no时,Redis将在当前终端会话中作为前台进程运行。这通常用于开发和调试目的,因为你可以直接看到Redis的输出和错误消息。

默认值与设置方法

  • 默认值 :在某些Redis版本中,daemonize的默认值为no,但在其他版本中可能默认为yes。这取决于你使用的Redis版本和安装方式。
  • 设置方法
    • 在Redis的配置文件(通常是redis.conf)中,找到daemonize配置项,并将其设置为yesno
    • 例如,要设置为后台运行,可以在配置文件中添加或修改以下行:daemonize yes

注意事项

  • 守护进程模式 :当Redis以守护进程模式运行时,即使你关闭了启动Redis的终端窗口,Redis服务也会继续运行。
  • 日志和PID文件 :在守护进程模式下,你需要确保Redis有足够的权限来写入logfilepidfile指定的文件。
  • 调试和开发 :在开发和调试过程中,将daemonize设置为no可能更方便,因为你可以直接看到Redis的输出和错误消息。但在生产环境中,通常建议将daemonize设置为yes,以确保Redis在后台稳定运行。

总结

daemonizeRedis配置文件中用于控制Redis是否以守护进程模式运行的参数。通过将其设置为yesno,你可以决定Redis是在后台运行还是在前台运行。在生产环境中,通常建议将daemonize设置为yes以确保Redis的稳定运行。

pidfile

bash 复制代码
[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,进而进行监控、管理或操作。

配置方法

  • Redis的配置文件(通常是redis.conf)中,找到pidfile配置项,并设置其值为你希望存储PID的文件路径。例如:
bash 复制代码
pidfile /var/run/redis/redis-server.pid

在这个例子中,Redis的PID将被写入到/var/run/redis/redis-server.pid文件中。

默认值与位置

  • 默认值Redis的默认pidfile位置可能会因操作系统和安装方式的不同而有所变化。在某些系统中,默认位置可能是/var/run/redis.pid
  • 位置pidfile通常位于Redis服务器的运行目录下,并且以.pid作为文件扩展名。

作用与用途

  • 管理Redis进程 :通过读取pidfile中的PID,可以确定Redis进程的运行状态,并根据需要进行启动、停止或重启操作。
  • 监控Redis进程 :监控程序可以定期读取pidfile中的PID,以检查Redis进程是否仍在运行。如果发现Redis进程不存在,监控程序可以采取相应的措施,如重新启动Redis
  • 与其他工具集成 :一些系统管理工具或脚本可能会使用到pidfile来识别和管理Redis进程。例如,使用kill命令向Redis进程发送信号时,可以通过读取pidfile中的PID来确定要发送信号的目标进程。

注意事项

  • 确保Redis进程有权限写入pidfile指定的文件路径。
  • 如果更改了pidfile的路径或文件名,请确保在启动Redis服务器之前更新配置文件中的相应配置项。

总之,pidfileRedis配置文件中用于存储Redis进程PID的文件路径配置项。通过正确配置和使用pidfile,可以方便地管理和监控Redis进程。

logfile

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

Redis配置文件中的logfile是用于配置Redis服务器日志文件的路径和名称的重要参数。以下是关于logfile的详细解释:

定义与功能

  • 定义logfileRedis配置文件中指定日志文件存储路径和名称的配置项。
  • 功能 :通过配置logfileRedis服务器可以将重要的运行事件、错误信息等记录到指定的日志文件中。这些日志信息对于了解Redis服务器的运行状态、进行故障排查和调优等操作非常有帮助。

配置方法

  1. 找到Redis配置文件Redis的配置文件通常名为redis.conf,其位置可能因安装方式和操作系统的不同而有所差异。常见的位置有/etc/redis/redis.conf/usr/local/etc/redis/redis.conf
  2. 打开并编辑配置文件 :使用文本编辑器打开redis.conf文件。
  3. 找到logfile配置项 :在配置文件中搜索logfile配置项,它通常位于文件的较前面部分。
  4. 设置日志文件路径和名称 :在logfile配置项后面,设置你希望存储Redis日志文件的路径和名称。例如:
  5. 如果logfile被设置为空字符串Redis将把日志信息输出到标准输出(stdout)。但是,如果Redis是以守护进程(daemon)方式运行的,标准输出将被重定向/dev/null,即不会保存任何日志信息
bash 复制代码
logfile /var/log/redis/redis-server.log

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

  1. 保存并关闭文件 :完成配置后,保存并关闭redis.conf文件。

  2. 重启Redis服务 :为了使新的logfile配置生效,需要重启Redis服务。这可以通过运行如sudo systemctl restart redis的命令(具体命令可能因操作系统和安装方式的不同而有所差异)来完成。

默认值与位置

  • 默认值Redis的默认logfile位置可能会因操作系统和安装方式的不同而有所变化。在某些系统中,默认位置可能是/var/log/redis/redis-server.log/var/log/redis.log
  • 位置 :通常建议将日志文件存储在系统的日志目录下,如/var/log/redis/,这样可以方便地进行日志管理和查看。

注意事项

  • 确保Redis进程有权限写入logfile指定的文件路径。
  • 如果更改了logfile的路径或文件名,请确保在启动Redis服务器之前更新配置文件中的相应配置项。
  • 如果logfile被设置为空字符串Redis将把日志信息输出到标准输出(stdout)。但是,如果Redis是以守护进程(daemon)方式运行的,标准输出将被重定向/dev/null,即不会保存任何日志信息。因此,通常建议明确指定一个有效的日志文件路径。

总结

通过正确配置Redis配置文件中的logfile参数,可以方便地管理和查看Redis服务器的日志信息,这对于了解Redis的运行状态、进行故障排查和调优等操作非常有帮助。

loglevel

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

定义与功能

  • 定义loglevelRedis配置文件中用于设置日志级别的配置项。
  • 功能 :控制Redis服务器记录日志的详细程度不同的日志级别决定了Redis会记录哪些类型的日志信息。

日志级别

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

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

配置方法

  • Redis的配置文件(通常是redis.conf)中,找到loglevel配置项,并设置其值为所需的日志级别。例如,要将日志级别设置为warning,可以添加或修改以下行:
bash 复制代码
loglevel warning
  • 修改完配置文件后,需要重启Redis服务才能使新的日志级别设置生效。

默认值

  • 在某些Redis版本中,loglevel的默认值为verbose。但请注意,默认值可能会因Redis版本和安装方式的不同而有所变化。

注意事项

  • 在生产环境中,通常建议将loglevel设置为noticewarning,以减少不必要的日志输出,降低系统负载和磁盘空间的占用。
  • 如果需要调试Redis或排查问题,可以将loglevel设置为debugverbose以获取更详细的日志信息。但在问题解决后,应及时将日志级别调回较低的值,以避免对系统性能造成负面影响。

总结

loglevelRedis配置文件中用于设置日志级别的配置项。通过合理配置loglevel,可以控制Redis记录日志的详细程度,以满足不同的需求和场景。

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep always-show-logo
always-show-logo no

Redis的配置文件中,always-show-logo 参数用于控制Redis在启动时是否总是显示其ASCII艺术风格的logo。以下是对该参数的详细解释:

定义与功能

  • 定义always-show-logo 是一个配置选项,用于控制Redis在启动时是否显示其logo
  • 功能 :默认情况下,Redis会根据一些条件(如标准输出是否为TTY设备)来决定是否在启动时显示logo。但是,通过设置always-show-logo参数,你可以强制Redis总是显示或总是不显示logo

配置细节

  • 默认值 :根据Redis的版本和配置文件的默认设置,always-show-logo 的默认值可能有所不同。但在许多情况下,它的默认行为是当标准输出是TTY设备时显示logo,否则不显示。

  • 配置方式 :在Redis的配置文件(通常是redis.conf)中,你可以找到always-show-logo这一行,并设置其值为yesno。例如:

    • 要强制Redis在启动时总是显示logo,设置:
    bash 复制代码
    always-show-logo yes
    • 要强制Redis在启动时从不显示logo,设置:
    bash 复制代码
    always-show-logo no

注意事项

  • 性能影响always-show-logo参数对Redis的性能没有直接影响。它仅仅控制Redis在启动时是否显示一个ASCII艺术风格的logo
  • 可读性 :对于人类用户来说,logo可以增强可读性和辨识度,让他们更容易地识别Redis的启动过程。但对于机器和脚本来说,logo可能是不必要的。
  • 兼容性 :不同版本的Redis可能对always-show-logo参数的支持有所不同。因此,在修改配置文件之前,最好查阅你所使用的Redis版本的官方文档或帮助信息。

总结

always-show-logoRedis配置文件中用于控制Redis在启动时是否显示其ASCII艺术风格logo的参数。通过将该参数设置为yesno,你可以强制Redis在启动时总是显示或从不显示logo。这个参数对Redis的性能没有直接影响,但可以增强可读性或满足特定的需求。在修改配置文件之前,请确保查阅你所使用的Redis版本的官方文档或帮助信息以获取最新的信息。

databases

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep databases
databases 16

Redis的配置文件中,databases参数用于设置Redis实例中数据库的数量。以下是关于databases参数的详细解释:

定义与功能

  • 定义databasesRedis 配置文件中用于指定实例中数据库数量的配置项。
  • 功能 :定义了在单个 Redis 实例中可以有多少个逻辑上独立的数据库。

配置细节

  • 默认值 :通常,Redisdatabases 参数的默认值为 16,表示实例中有 16 个独立的数据库。
  • 配置方式 :在 Redis 的配置文件(通常是 redis.conf)中,你可以找到 databases 这一行,并设置其值为你想要的数量。例如,如果你想要 32 个数据库,你可以这样设置:
bash 复制代码
databases 32

注意事项

  • 数据库编号 :这些数据库是通过数字索引来访问的,从 0 开始,直到 databases 参数所指定的数量减 1。
  • 共享内存 :虽然这些数据库在逻辑上是独立的,但它们实际上共享同一个物理内存空间。这意味着,例如,一个数据库使用的内存量增加,可能会影响到其他数据库可用的内存量。
  • 性能影响 :虽然拥有多个数据库可以方便地将不同类型的数据分开存储,但这并不总是带来性能上的优势。在某些情况下,将不同的数据集存储在单独的 Redis 实例中可能会更有效率。
  • 使用场景:在某些场景中,使用多个数据库可能是有用的,例如,当你想要将不同的应用程序或服务的数据分开存储时。但在许多其他场景中,使用单个数据库并通过键的命名空间(例如,使用前缀)来区分不同的数据集可能更为简单和高效。

总结

databases 参数在 Redis 配置文件中用于设置实例中数据库的数量。通过调整这个参数,你可以控制 Redis 实例中可用的逻辑数据库的数量。然而,需要注意的是,这些数据库共享同一个物理内存空间,并且拥有多个数据库并不总是带来性能上的优势。在设计和部署 Redis 系统时,应根据具体的需求和场景来选择合适的配置。

security安全类

通过redis命令行设置密码

bash 复制代码
[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 服务器的密码,以要求客户端在尝试进行身份验证之前提供密码。这增强了 Redis 服务器的安全性,因为它可以防止未授权的访问。

配置细节

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

使用密码进行身份验证

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

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

bash 复制代码
[root@server ~]# redis-cli -a mysecret

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

bash 复制代码
[root@server ~]# redis-cli
127.0.0.1:6379> AUTH mysecret
OK

注意事项

  • 密码的复杂性:确保你的密码是复杂的,并且不容易被猜测。使用长密码、大小写字母、数字和特殊字符的组合。
  • 防火墙和安全组除了设置密码外,还应考虑使用防火墙安全组来限制对 Redis 服务器的访问。只允许必要的 IP 地址或范围访问 Redis 端口(默认为 6379)。
  • 使用 Redis Sentinel 或 Redis Cluster :对于高可用性和安全性,考虑使用 Redis SentinelRedis Cluster 来管理你的 Redis 实例。这些工具提供了额外的安全性和故障恢复功能。
  • 避免在生产环境中使用默认端口 :默认情况下,Redis 使用 6379 端口。在生产环境中,考虑更改此端口以增加安全性。
  • 定期更新密码 :定期更改 Redis 密码,以减少密码泄露的风险。

示例

bash 复制代码
[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

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

maxmemory

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

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

示例配置:

bash 复制代码
# 设置最大内存限制为 4GB
maxmemory 4gb

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

注意事项:

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

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

    • volatile-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU)数据淘汰。只针对设置了过期时间的键。
    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中选择最近最少使用的(LRU)数据淘汰。
    • volatile-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU)数据淘汰。只针对设置了过期时间的键。
    • allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中选择最不经常使用的(LFU)数据淘汰。
    • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中随机选择键淘汰。
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中随机选择键淘汰。
    • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,选择剩余时间(TTL)最短的键淘汰。
    • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

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

  3. 内存碎片 :即使 Redis 使用的内存没有达到 maxmemory 限制,它也可能因为内存碎片而无法为新数据分配空间。内存碎片是由于 Redis 的内存分配和释放策略造成的。你可以使用 info memory 命令来查看 Redis内存使用情况,包括内存碎片率

  4. 持久化 :如果你的 Redis 实例配置了持久化(如 RDBAOF),请注意这些持久化文件也会占用磁盘空间。你需要确保你的服务器有足够的磁盘空间来存储这些文件。

  5. 监控和告警 :定期监控 Redis 的内存使用情况,并设置告警,以便在 Redis 接近或达到 maxmemory 限制时及时采取行动。

maxmemory-policy

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep maxmemory-policy
# maxmemory-policy noeviction

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

作用

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

可选策略

  1. volatile-lru :从设置了过期时间的键中选择最近最少使用的(Least Recently Used, LRU)键进行淘汰。
  2. volatile-lfu :从设置了过期时间的键中选择最近最不经常使用的(Least Frequently Used, LFU)键进行淘汰。
  3. volatile-ttl :从设置了过期时间的键中选择剩余时间(TTL)最短的键进行淘汰。
  4. volatile-random :从设置了过期时间的键随机选择键进行淘汰。
  5. allkeys-lru :从所有键中选择最近最少使用的键进行淘汰不考虑键是否设置了过期时间。
  6. allkeys-lfu :从所有键中选择最近最不经常使用的键进行淘汰不考虑键是否设置了过期时间。
  7. allkeys-random :从所有键中随机选择键进行淘汰。
  8. noeviction :当内存达到maxmemory限制时,不进行任何淘汰操作,新的写入操作将返回错误。

配置示例

redis.conf配置文件中,可以这样设置maxmemory-policy

conf 复制代码
maxmemory-policy volatile-lru

注意事项

  • 策略选择 :选择哪种策略取决于你的应用需求。例如,如果你的应用对数据的新鲜度要求很高,那么LRU策略可能是一个好选择。如果你的应用希望保留那些被频繁访问的数据,那么LFU策略可能更适合。
  • 性能影响 :虽然LRULFU策略在大多数情况下都能提供良好的性能,但在极端情况下(如大量键在短时间内被访问),它们可能需要消耗额外的CPU资源来维护数据的访问统计信息。
  • 持久化 :如果你的Redis实例配置了持久化(如RDBAOF),请确保在修改maxmemory-policy后重新评估持久化策略,以确保在内存不足时能够正确地保存数据。
  • 监控和告警 :定期监控Redis内存使用情况,并设置告警,以便在Redis接近或达到maxmemory限制时及时采取行动。你可以使用Redisinfo memory命令来获取内存使用的详细信息。

maxmemory-samples

bash 复制代码
[root@server ~]# cat /etc/redis.conf | grep maxmemory-samples
# maxmemory-samples 5

Redis 配置文件中,maxmemory-samples 是一个与内存淘汰策略(由 maxmemory-policy 控制)相关的配置项,特别是与那些使用随机性或近似算法淘汰策略(如 volatile-randomallkeys-randomvolatile-lfuallkeys-lfu)有关。

作用

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

配置示例

redis.conf 配置文件中,可以这样设置 maxmemory-samples

bash 复制代码
maxmemory-samples 5

细节说明

  1. 样本数量maxmemory-samples 的值越大,Redis 估计键的使用情况的准确性就越高,但同时也会增加 CPU 消耗和内存淘汰的延迟。默认情况下,Redis 通常使用 5 个样本,但在高流量环境下,你可能需要增加这个值以获得更准确的估算
  2. 对性能的影响 :当 Redis 需要执行淘汰策略时,它会从数据集中随机选择 maxmemory-samples 数量的键作为样本,并根据这些样本的使用情况来估算整个数据集的使用情况。因此,maxmemory-samples 的值越大,Redis 执行淘汰策略时所需的 CPU 时间和内存访问量就越多。
  3. 与其他配置项的关系maxmemory-samplesmaxmemory-policy 紧密相关。只有当 maxmemory-policy 设置为需要样本估算的策略(如 LFU)时,maxmemory-samples 的值才会影响 Redis 的行为。

总结

maxmemory-samplesRedis 中用于配置淘汰策略样本数量的配置项。在大多数情况下,使用默认值(如 5)可能就足够了,但在高流量或需要更精确估算的场景下,你可能需要增加这个值。调整这个值时,请确保考虑到对 Redis 性能的影响。

相关推荐
Linux运维技术栈7 分钟前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
乔巴不是狸猫10 分钟前
第11周作业
linux
YashanDB1 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
Bessssss1 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
苹果醋31 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
jwensh2 小时前
【Jenkins】Declarative和Scripted两种脚本模式有什么具体的区别
运维·前端·jenkins
silver6872 小时前
Linux 下的 GPT 和 MBR 分区表详解
linux
风间琉璃""2 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander2 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql