Redis 端口配置完全指南:Redis 是如何工作的?

Redis 是一种开源的内存数据存储结构,可承担多种角色,包括流处理引擎、数据库、缓存和消息代理。Redis 端口默认通常设置为 6379,负责客户端与 Redis 服务器之间的通信,从而支持数据存储与检索等操作。

作为一种支持磁盘持久化的键值数据库,Redis 支持丰富的数据结构,例如位图(bitmap)、流(stream)、地理空间索引、列表、哈希、集合以及有序集合。这种多样性让用户能够灵活地处理数据,包括针对特定应用和场景执行范围查询。

在本文中,您将深入了解 Redis 端口的相关知识,我们也会解答一个问题:Redis 是如何工作的?无论您是经验丰富的专业人士还是初学者,掌握 Redis 端口的方方面面都能帮助您优化 Redis 服务器配置,从而提升速度与可扩展性。下面就让我们深入细节,提升您的 Redis 专业能力!

Redis 是如何工作的?

Redis 是一种通用的内存数据存储,以速度和灵活性为设计目标,提供多种数据结构和功能,可用于缓存、实时分析、消息传递等场景。凭借其简洁性与高性能,Redis 在现代应用开发的各种场景中广受欢迎。

Redis 采用客户端-服务器架构,客户端通过网络套接字与 Redis 服务器交互。Redis 服务器在指定端口上等待客户端连接,该端口即 Redis 端口。默认的 Redis 端口为 6379,但您可以在配置文件中修改它。

Redis 端口是一项重要的安全配置项,客户端借助它与 Redis 服务器建立连接,并对存储的数据执行各种操作。

下面是一张简化的 Redis 客户端-服务器通信示意图,展示了应用如何通过 TCP/RESP 向 Redis 发送命令、Redis 如何在内存中处理数据,以及它如何支持持久化和 Pub/Sub 消息传递。

Redis 默认端口 6379 客户端-服务器通信

该架构体现了 Redis 在提供快速内存处理能力的同时,还支持数据持久性和实时通信功能。

在 Redis 中,数据以键值对形式存储。键是唯一标识符,值既可以是简单数据类型(字符串、整数),也可以是复杂的数据结构。Redis 提供多种磁盘持久化选项,以保证数据的持久性。此外,它支持事务操作,通过 LRU(最近最少使用)策略高效管理内存,并内置复制功能。

此外,Redis Sentinel 和 Redis Cluster 进一步提升了系统可靠性,为分布式环境提供强大的容错方案。这些机制确保即使发生故障,系统依然保持可用和正常运行。

不仅如此,Redis 还支持原子操作,可以精确且不可分割地执行各类操作,例如向字符串追加内容、向列表插入元素、递增哈希中的值、执行集合的交集、并集和差集运算,或获取有序集合中排名最高的成员。原子操作的多样性提升了在 Redis 生态中处理数据的灵活性与效率。

Redis 默认端口号是多少?

Redis 接收连接的默认端口是 6379。Redis 是一种广受欢迎的内存数据结构存储,可用作消息代理、数据库和缓存等。在生产环境中使用 Redis 时,了解 Redis 端口并正确配置它非常重要。

客户端会自动连接到默认的 Redis 端口 6379,从而简化与 Redis 的连接过程。您可以通过 Redis 配置文件将该默认端口更改为其他端口号。

近年来,使用 6379 这类广为人知的端口所带来的安全隐患引发了关注。人们担心黑客可能利用这一常用端口未经授权访问 Redis 服务器,进而导致安全问题或数据泄露。

为此,一些公司采取了相应措施,例如将 Redis 运行在非标准端口上,或实施额外的防护措施以防止未经授权的访问。当在同一台服务器上运行多个 Redis 实例,或希望通过使用非标准端口来增强安全性时,这种做法会很有帮助。

尽管有这些预防措施,6379 仍然是 Redis 最常用的端口,并在 Redis 环境中继续发挥重要作用。

Redis 各端口详解

根据配置不同,Redis 可以运行在不同的端口上。下面列出的是最常见的默认设置,但它们并非固定不变,管理员可以根据网络设计、部署结构或安全策略自定义这些端口。

端口

用途

说明

6379

Redis 主端口

用于客户端访问以及常规 Redis 读写命令的主要默认端口。

16379

集群总线

负责 Redis Cluster 节点之间的内部通信,通常为 Redis 主端口加 10000。

26379

Redis Sentinel

Redis Sentinel 的标准端口,用于监控服务器并管理故障转移事件。

6380

额外的 Redis 实例

常用于同一台机器上的额外 Redis 实例,例如用于预发布环境、复制或隔离的工作负载。

自定义 cluster-port

自定义集群总线端口

在 Redis Cluster 中,也可以手动指定此端口,而不必遵循“主端口加 10000”的默认规则。

对于简单的 Redis 部署,通常只需要 6379 端口。但在 Redis Cluster 或 Redis Sentinel 等更复杂的架构中,还需要额外的端口来处理节点通信、健康监控和自动故障转移。

下面是一张简化的 Redis 端口概览图。在大多数部署中,应用通过 6379 端口连接 Redis,集群节点之间通过 16379 端口通信,而 Redis Sentinel 使用 26379 端口进行监控和高可用操作。

Redis 端口概览 6379 16379 26379

这些端口共同展示了 Redis 如何将客户端访问、集群内部通信和基于 Sentinel 的监控分开,以支持高性能、可扩展性和高可用性。

如何查看 Redis 正在使用的端口

当您需要检查服务器上的 Redis 端口设置时,最简单的方法是直接查询正在运行的 Redis 实例。这比仅查看配置文件更可靠,因为运行中的进程会显示 Redis 当前实际使用的端口。

最快捷的方式是使用 Redis CLI:

redis-cli CONFIG GET port

大多数情况下,Redis 会返回类似如下的结果:

1) "port"
2) "6379"

如果您的 Redis 服务器运行在其他主机上,或已经使用了自定义端口,您可以手动指定连接参数:

redis-cli -h your-host -p your-port CONFIG GET port

您也可以查看 redis.conf 文件中的 port 指令,但在排查问题时这种方法不够精确,因为运行中的服务可能使用了不同的运行时设置。因此,检查活动实例通常是更好的选择。

下面是一个 Redis 配置文件(redis.conf)示例,展示了典型 Redis 部署中与端口配置、网络访问、持久化、安全和内存使用相关的重要设置。

Redis 端口配置 redis.conf 文件

在标准部署中,Redis 通常监听 6379 端口。但在 Redis Cluster 等更高级的环境中,每个节点可能会使用额外的端口进行内部通信。因此,将 CONFIG GET port 与操作系统层面的快速检查结合使用,通常是确认 Redis 端口最有效的方法。

在系统层面,您还可以使用 ss 或 lsof 等工具来确认 Redis 正在监听哪个端口:

ss -ltnp | grep redis
lsof -i -P -n | grep redis-server

当同一台机器上运行多个 Redis 实例,或者您希望确认服务绑定到了预期的 TCP 端口时,这些命令尤其有用。

Redis 端口的防火墙配置

在服务器上使用 Redis 时,配置防火墙以控制 Redis 端口(通常为 6379)上的入站连接非常重要。这可以通过服务器的防火墙软件或云服务商的网络安全组来实现。在生产环境中,必须限制对 Redis 端口的访问,仅允许经过授权的主机或指定的 IP 地址连接。

要有效地为 Redis 端口配置防火墙,您需要完成以下关键步骤:

1. 首先,确认 Redis 实例所运行的端口。Redis 默认使用 6379 端口,但您可以根据需要更改该默认端口。

2. 建立防火墙规则,仅允许 Redis 端口上的入站通信,并确保只有受信任的来源可以访问。这样可以将对 Redis 实例的访问限制在获批的主机或指定的 IP 地址范围内。

3. 考虑禁用对 Redis 端口的外部访问,尤其是当 Redis 实例托管在公网服务器上时。这一预防措施可以阻止来自外部 IP 地址的流量访问 Redis 端口,从而增强安全性。

4. 为 Redis 实例的连接同时启用加密和身份验证,以进一步提升安全性。这一步可以确保数据传输安全,并且只有经过授权的用户才能访问系统。

按照以上步骤,您就可以为 Redis 建立稳健的防火墙配置,帮助保护实例免受未经授权的访问和潜在安全威胁。

如何更改 Redis 默认端口?

Redis 默认端口为 6379。如果您想更改默认的 Redis 端口,可以按照以下步骤操作:

  • 首先,找到 Redis 配置文件。该文件通常名为“redis.conf”。在 Linux 系统中,配置文件的常见位置包括“/etc/redis/redis.conf”或 Redis 安装目录。
  • 使用文本编辑器打开 Redis 服务器配置文件。编辑该文件可能需要管理员权限。
  • 接下来,找到“port”配置项,即以“port”开头的那一行。这一行指定了 Redis 监听连接的端口号。
# Specify the port number
port 6379
  • 将 Redis 端口 6379 替换为您想要的端口号。
# Specify the port number
port 12345

将 12345 替换为您希望使用的端口号。

  • 保存对 Redis 配置文件的修改并关闭文本编辑器。
  • 重启 Redis 服务器以应用新的端口配置。重启 Redis 的方法取决于您的操作系统以及 Redis 的安装方式。在 Linux 系统中,重启 Redis 服务器的常用命令如下:
$ service redis-server restart 

或

$ systemctl restart redis-server

完成上述步骤后,Redis 服务器将运行在您指定的新端口上,而不再使用默认端口 6379。请务必同步更新 Redis 客户端配置,以便使用新端口连接 Redis 服务器。

Redis 配置最佳实践

1. 使用专用配置文件

面向生产环境的 Redis 配置应始终写在专门的配置文件中,而不是依赖启动时的默认值。这样可以让您的 Redis 配置更易于审查、记录,并在不同环境之间保持一致,尤其是在管理多台服务器或与版本相关的设置时。

2. 加固所有与访问相关的 Redis 设置

安全性是审查 Redis 设置时最重要的部分之一。Redis 官方建议限制网络暴露,留意保护模式(protected mode),并使用基于 ACL 的身份验证,让客户端只获得其真正需要的权限。这有助于降低未经授权访问的风险,使整体 Redis 配置更加安全。

3. 提前设置内存上限和淘汰规则

良好的 Redis 配置应明确定义 maxmemory 以及合适的 maxmemory-policy。否则,Redis 可能会持续占用 RAM,直到触及基础设施的上限。选择正确的内存行为是保证性能稳定的核心 Redis 设置,在以缓存为主的工作负载中尤为重要。

4. 选择合适的持久化策略

您的 Redis 配置还应与数据持久性需求相匹配。Redis 支持 RDB 快照和 AOF 持久化,具体选择取决于您的应用能容忍多少数据丢失以及需要多快的恢复速度。可靠的 Redis 配置不仅要快,还要为重启和故障做好准备。

5. 谨慎变更,保持可维护性

Redis 允许通过 CONFIG SET 在运行时更新配置,这对于测试或受控调整很有用,但配置变更仍应经过深思熟虑并做好记录。在实践中,最佳的 Redis 设置策略应当清晰、可复现,并便于长期审计。

如果您正在规划生产环境中的 Redis 部署,在 BlueVPS 的 Linux VPS 上托管 Redis 可以让配置和扩展更加轻松。VPS 环境为您提供管理安全、网络和性能设置所需的控制权,而不受共享环境的限制。

Redis 客户端库

Redis 客户端库是促进应用与 Redis 服务器之间通信的软件组件。这些库充当接口,使开发者能够通过 Redis 端口与 Redis 交互,并执行数据存储、检索和连接管理等操作。

从本质上讲,Redis 客户端库简化了 Redis 端口在不同编程语言中的集成,为操作 Redis 服务器提供便捷的方法和函数。它们屏蔽了底层通信的复杂性,让开发者无需处理繁琐的网络细节,即可轻松地将 Redis 功能整合到应用中。

使用 Redis 客户端库有诸多优势,可以简化开发流程并提升整体性能。其中包括缩短开发时间:客户端库屏蔽了 Redis 协议的复杂性,节省了开发者的精力。

此外,许多 Redis 客户端库都针对性能进行了优化,能够实现更快的数据传输。错误处理也变得更加简单,客户端库会提供清晰的错误信息并自动处理各种错误情况。

使用客户端库还能确保不同编程语言之间语法一致,促进代码的统一性。而且,这些库通常支持与 Redis 端口建立安全连接,有助于加强数据保护并防止未经授权的访问。

Redis 端口的应用场景

Redis 默认端口 6379 是客户端连接 Redis 服务器的入口,用于向 Redis 实例传输命令。借助这一功能,开发者可以与 Redis 实例交互,执行数据存储与检索、pub/sub 消息传递、缓存等多种操作。Redis 被广泛应用于各种场景,包括:

缓存

使用 Redis 做缓存,就是将频繁访问的数据存储在内存中,以便更快地检索,减少从主存储中重复读取数据的需要。这样可以快速提供频繁请求的信息,从而加速应用性能。

会话管理

Redis 是管理应用中用户会话的高效方案。将会话数据存储在 Redis 中,系统就能快速检索和更新用户相关信息,为用户带来流畅、响应迅速的体验。

实时消息传递

Redis 可作为可靠的消息代理,促进系统内不同组件之间或独立应用之间的通信。它支持消息交换,确保分布式和事件驱动架构中的实时通信与协调。

快速数据摄取

Redis 擅长处理快速数据摄取场景,即需要快速接收并处理大量数据的场景。其内存存储和经过优化的数据结构,使其成为需要快速高效处理传入数据流的应用的理想工具。

去重

Redis 可用于去重任务,即系统需要识别并剔除重复的记录或事件。借助 Redis 的集合和有序集合数据结构,可以高效地识别和管理重复项。

向量数据库

Redis 可以用作向量数据库,这在数据涉及向量或多维数组的场景中尤其有用。它支持高效地存储、检索和处理向量数据,适用于需要处理复杂数据结构的应用。

特征存储

在机器学习和数据科学应用中,Redis 被用作特征存储(feature store)。它提供了一种快速可靠的方式来存储和检索模型所用的特征,使相关特征随时可供计算使用,从而支持实时预测与分析。

使用 Redis 有哪些好处?

Redis 是一款开源、支持高度复制的数据库和缓存服务器,通过充分利用 Redis 端口(默认通常为 6379),它具备以下优势:

1. Redis 作为映射式键值缓存系统运行,性能与 Memcached 相当,是快速存储和检索数据的强大方案。

2. 使用 Redis 时,没有强制预定义模式或数据表的严格规则。它采用无模式(schemaless)方式,为数据建模提供了灵活性。

3. Redis 支持多种数据模型或类型,用户可以根据具体需求使用不同的数据结构。

4. Redis 拥有丰富的高级功能,使其有别于其他数据库系统,其能力远不止基本的数据存储与检索。

5. 借助分片技术,Redis 端口每秒能够处理大量并发写请求或事务。分片将数据分布到多个节点上,从而提升可扩展性。

6. Redis 可以作为其他数据库的辅助工具,用于分担负载、提升性能;也可以根据具体需求和使用场景作为主数据库使用。

7. 在需要快速摄取数据并注重数据完整性的场景中,Redis 尤其有用。高效率和复制等特性使 Redis 在这些场景中极具价值。

如果您使用的是 VPS 服务器,可以在其上安装 Redis 并配置 Redis 端口,从而获得一个通用、高性能的数据管理方案,兼顾灵活性、可扩展性和效率。

常见的 Redis 端口问题及故障排查

Redis 端口问题通常由几个可预见的原因引起:客户端连接了错误的地址;服务器只接受本地连接;忽略了 Cluster 或 Sentinel 所需的额外端口;TLS 启用在另一个端点上;或者运行中的服务使用的端口与配置文件中预期的不同。开始排查最快的方法是手动测试连接,并在服务器上确认当前生效的 Redis 端口。

redis-cli -h <host> -p <port> PING
redis-cli -h <host> -p <port> CONFIG GET port

1. 连接目标错误

有时应用仍在尝试连接 127.0.0.1:6379,而 Redis 实际上运行在别处或使用了非默认端口。很多情况下,问题并不在 Redis 本身,而在于过时的连接字符串或环境变量。

2. Redis 在本地可响应,但外部无法访问

如果命令在服务器上能正常执行,但从其他机器访问失败,可能是 Redis 只绑定到了 localhost,或者网络规则阻止了访问。当 bind、防火墙规则或保护模式未针对远程流量进行配置时,这种情况很常见。

3. Redis Cluster 缺少端口

Redis Cluster 节点通常使用两个端口:一个用于客户端流量,另一个用于集群内部通信。如果只开放了主端口,节点可能看起来可以访问,但复制、故障转移或集群协调却会失败。

4. 将 Sentinel 与数据服务混淆

Sentinel 使用自己的端口,用于监控和故障转移控制,而不是用于常规的读写操作。如果应用把 Sentinel 当作 Redis 数据库本身来连接,将无法正常工作。

5. 运行时值与配置文件不一致

redis.conf 中定义的端口并不总是与活动进程实际使用的端口相同。排查问题时,请始终先检查服务器的实时设置,然后再与保存的配置文件进行比较。

总结

Redis 端口对于在生产环境中优化 Redis 性能至关重要。在本文中,我们探讨了 Redis 的多重角色,重点介绍了其内存处理能力,并深入讨论了通常设置为 6379 的 Redis 默认端口的重要性。

了解如何配置和自定义 Redis 端口,可以确保灵活性与安全性,让用户在各种应用中高效地使用 Redis。因此,无论您将 Redis 用于缓存、会话管理还是消息传递,深入理解 Redis 端口都是充分发挥其潜力的关键。

Redis 端口常见问题

Redis 默认端口是多少?

Redis 默认端口为 6379。在标准部署中,除非您在配置中修改了端口,或使用其他端口值启动服务器,否则 Redis 会在此端口上监听客户端连接。

6379 端口有什么用途?

6379 端口是 Redis 的主要客户端端口,用于常规的应用流量,包括客户端连接、读取数据、写入数据,以及通过 redis-cli 等工具执行 Redis 命令。

如何更改 Redis 端口?

您可以编辑 redis.conf 文件中的 port 指令并重启 Redis 来更改端口。另一种方法是在命令行中以自定义端口启动 Redis,例如在 6380 端口而不是默认的 6379 端口上启动 Redis。

Redis 6379 端口使用 TCP 还是 UDP?

Redis 6379 端口使用 TCP,而不是 UDP。Redis 客户端通过 TCP 连接进行通信,不过在启用相应选项时,Redis 也可以通过 Unix 套接字工作。

Redis Sentinel 使用哪个端口?

Redis Sentinel 默认使用 26379 端口。该端口用于 Sentinel 监控、实例发现和故障转移协调,而不是用于常规的应用读写流量。

如何检查 Redis 是否正在运行?

检查 Redis 是否运行最简单的方法是使用 redis-cli 连接并发送 PING 命令。如果 Redis 可用,它会返回 PONG。对于远程实例,您也可以直接测试特定的主机和端口。