服务器怎么访问Redis?

下面我将从基础概念不同环境的访问方式代码示例最佳实践四个方面来详细说明。

基础概念:客户端-服务器模式

首先要明确,Redis 采用客户端-服务器(C/S)架构。

Redis 服务器一个持续运行的服务进程(redis-server),监听一个端口(默认 6379),等待连接。

客户端你的应用程序服务器(如 Java、Python、Node.js 应用)就是客户端,它需要使用一个Redis 客户端库 来建立与 Redis 服务器的连接。

访问的本质是:应用程序(客户端)通过网络协议(TCP)向 Redis 服务器(服务端)发送命令并接收响应

不同环境的访问方式

根据你的服务器和 Redis 实例的部署位置,访问方式主要有以下几种:

场景一:服务器与 Redis 在同一台机器上(本地访问)

这是最简单的场景,通常在开发环境中使用。

连接地址127.0.0.1localhost

端口6379(默认端口)

优势网络延迟极低,无需担心网络安全策略。

配置Redis 默认配置即可访问,但需要确保bind 配置项允许本地连接(默认是127.0.0.1)。

场景二:服务器与 Redis 在同一内网中(经典服务器架构)

这是生产环境中最常见的架构,例如应用服务器和 Redis 服务器是两台独立的云服务器,但处于同一个 VPC(虚拟私有云)或局域网内。

连接地址Redis 服务器的内网 IP 地址(例如192.168.1.100)。

端口6379

优势内网传输,速度快,延迟低,且不经过公网,安全性高。

配置

1. 在 Redis 配置文件redis.conf 中,需要修改bind 指令,绑定到内网 IP 或0.0.0.0(允许所有 IP 连接,但需配合防火墙使用)。

        bind 192.168.1.100 127.0.0.1
        # 或者
        bind 0.0.0.0

2. 如果设置了密码,需要配置requirepass

3. 确保服务器的防火墙(如 iptables、firewalld)或云服务商的安全组规则允许应用服务器访问 Redis 服务器的 6379 端口

场景三:服务器通过公网访问 Redis(不推荐,除非必须)

警告:除非万不得已,否则不要将 Redis 暴露在公网,因为这会带来极大的安全风险(数据泄露、被植入挖矿程序等)。

如果必须使用,请务必采取严格的安全措施:

连接地址Redis 服务器的公网 IP 地址 或域名。

端口一个非默认端口(例如6380),避免被端口扫描工具轻易发现。

安全措施

1.强密码:设置一个非常复杂的requirepass 密码。

2.端口伪装:修改默认端口port 6379 为一个不常见的端口。

3.防火墙限制:在安全组或防火墙中,只允许你的应用服务器公网 IP 访问 Redis 的端口,拒绝所有其他 IP。

4.SSL/TLS 加密(Redis 6.0+):如果客户端和服务器库都支持,启用 TLS 加密传输通道。

代码示例

以下是在不同编程语言中使用客户端库连接 Redis 的简单示例。

Python (使用redis-py 库)

import redis
建立连接池(推荐使用连接池以提高性能)
pool = redis.ConnectionPool(
    host='192.168.1.100', # Redis 服务器地址
    port=6379,            # Redis 服务器端口
    password='your_strong_password_here', # 如果有密码
    decode_responses=True # 将返回的 bytes 类型解码为 str
)
r = redis.Redis(connection_pool=pool)
测试连接并执行命令
try:
    r.set('my_key', 'Hello, Redis!')
    value = r.get('my_key')
    print(value) # 输出:Hello, Redis!
except Exception as e:
    print(f"连接或操作失败: {e}")

Java (使用 `Jedis` 库)

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisExample {
    public static void main(String[] args) {
        // 使用连接池
        JedisPool pool = new JedisPool("192.168.1.100", 6379);
        
        try (Jedis jedis = pool.getResource()) {
            // 如果有密码
            // jedis.auth("your_strong_password_here");
            
            jedis.set("my_key", "Hello, Redis from Java!");
            String value = jedis.get("my_key");
            System.out.println(value); // 输出:Hello, Redis from Java!
        } catch (Exception e) {
            System.out.println("连接或操作失败: " + e.getMessage());
        } finally {
            pool.close();
        }
    }
}

Node.js (使用ioredis 库)

const Redis = require('ioredis');
// 创建 Redis 客户端
const redis = new Redis({
    host: '192.168.1.100', // Redis 服务器地址
    port: 6379,            // Redis 服务器端口
    password: 'your_strong_password_here', // 如果有密码
});
// 执行命令
async function testRedis() {
    try {
        await redis.set('my_key', 'Hello, Redis from Node.js!');
        const value = await redis.get('my_key');
        console.log(value); // 输出:Hello, Redis from Node.js!
    } catch (err) {
        console.error('连接或操作失败:', err);
    } finally {
        redis.quit(); // 关闭连接
    }
}
testRedis();

最佳实践与安全建议

1、使用连接池:避免为每个请求创建新的连接,使用连接池来管理复用连接,大大提高性能。

2、使用强密码:生产环境必须设置复杂密码 (requirepass)。

3、绑定内网 IP:在redis.conf 中通过bind 指令限制可连接的 IP,不要轻易使用bind 0.0.0.0

4、防火墙/安全组:这是第一道防线,只允许必要的应用服务器 IP 访问 Redis 端口。

5、重命名或禁用危险命令:例如将FLUSHALLCONFIG 等命令重命名为一个难以猜测的字符串,防止误操作或恶意操作。

    rename-command FLUSHALL "a_very_complex_name_that_nobody_guesses"
    rename-command CONFIG ""

6、以非 root 用户运行 Redis:降低被入侵后的权限风险。

7、考虑使用托管服务:如果不想自己维护 Redis 服务器,可以直接使用云服务商提供的 Redis 服务,如 AWS ElastiCache、Azure Cache for Redis、阿里云 ApsaraDB for Redis 等,它们通常内置了高可用、备份和安全管理功能。

服务器访问 Redis 的关键步骤是:

1、确定网络环境:判断是本地、内网还是公网访问。

2、配置 Redis 服务器:正确设置redis.confbind,port,requirepass)。

3、配置网络安全:设置防火墙/安全组规则。

4、在应用代码中:使用正确的连接参数(主机、端口、密码)和对应的客户端库进行连接和操作。

按照以上指南,你就可以安全、高效地在你的服务器上访问 Redis 了。

文章摘自:https://idc.huochengrm.cn/fwq/17456.html

评论

精彩评论
  • 2025-10-07 11:49:49

    服务器通过使用Redis客户端库,如Python的redis-py,通过TCP/IP连接到本地或远程Redis服务器进行数据交互。