redis 配置学习笔记

目录

查看版本:

启动服务:

指定端口启动

[python启动 redis](#python启动 redis)

[python 连接redis.](#python 连接redis.)

启动带密码:

使用配置文件启动:


查看版本:

redis-server -v

启动服务:

redis-server

默认是localhost可以访问,端口6379

指定端口启动

bash 复制代码
# 使用6380端口启动,外部不能访问
redis-server --port 6380

# 停止当前Redispkill -f "redis-server.*6380"# 重新启动,允许外部连接
redis-server --port 6380 --bind 0.0.0.0 --protected-mode no --daemonize yes

python启动 redis

python 复制代码
import subprocess
import time
import redis
import os
import signal

def find_redis_pid(port):
    """查找指定端口的 Redis 进程 PID"""
    try:
        result = subprocess.run(['netstat', '-tulnp'], capture_output=True, text=True)
        for line in result.stdout.splitlines():
            if f":{port} " in line and 'redis-server' in line:
                parts = line.split()
                pid_part = parts[-1]  # 形如 1234/redis-server
                pid = pid_part.split('/')[0]
                return int(pid)
        return None
    except Exception as e:
        print(f"❌ 查找 Redis 进程出错: {e}")
        return None

def stop_redis_on_port(port):
    """关闭指定端口的 Redis"""
    pid = find_redis_pid(port)
    if pid:
        try:
            os.kill(pid, signal.SIGTERM)
            time.sleep(1)
            print(f"🛑 已关闭 Redis 进程 (PID={pid}) on port {port}")
            return True
        except Exception as e:
            print(f"❌ 关闭 Redis 出错: {e}")
            return False
    else:
        print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")
        return False


def test_redis_port(host='127.0.0.1', port=6380, password=None, db=0):
    """测试 Redis 是否可连接"""
    try:
        r = redis.Redis(host=host, port=port, password=password, db=db, decode_responses=True)
        r.ping()
        print(f"✅ Redis {host}:{port} 连接成功")
        return True
    except redis.AuthenticationError:
        print(f"❌ 密码错误,无法连接 Redis {host}:{port}")
    except redis.ConnectionError:
        print(f"❌ Redis {host}:{port} 无法连接")
    return False


def start_redis_on_port(port=6380, password='StrongPass123', bind_ip='0.0.0.0'):
    """启动 Redis:检测端口 → 停止旧进程 → 启动新实例"""
    try:
        # 如果已运行,先关闭
        if find_redis_pid(port):
            print(f"⚠️ 检测到 Redis 已在端口 {port} 运行,准备关闭...")
            stop_redis_on_port(port)

        # 启动 Redis
        print(f"🚀 启动 Redis ({bind_ip}:{port}) ...")
        subprocess.Popen([
            'redis-server',
            '--port', str(port),
            '--bind', bind_ip,
            '--requirepass', password,
            '--protected-mode', 'no',
            '--daemonize', 'yes'
        ])
        time.sleep(2)

        # 验证
        if test_redis_port(host=bind_ip, port=port, password=password):
            print(f"🎉 Redis 已在 {bind_ip}:{port} 成功启动 (密码: {password})")
            return True
        else:
            print(f"❌ Redis 启动失败,请检查日志")
            return False

    except Exception as e:
        print(f"启动 Redis 出错: {e}")
        return False

if __name__ == "__main__":
    start_redis_on_port(port=6380, password="infini_rag_flow")

python 连接redis.

python 复制代码
import redis
import subprocess
import time

def test_redis_port(host='192.168.8.231', port=6380, db=0, password=None):
    """测试Redis端口连接,可指定db"""
    try:
        # 创建 Redis 连接(支持密码和db)
        r = redis.Redis(
            host=host,
            port=port,
            db=db,
            password=password,
            decode_responses=True
        )

        r.ping()
        print(f"✅ Redis端口 {port} (db={db}) 连接成功")

        # 测试基本操作
        test_key = f'test_port_{port}_db{db}'
        r.set(test_key, f'Hello from port {port}, db {db}')
        value = r.get(test_key)
        print(f"测试数据: {value}")
        return True

    except redis.ConnectionError:
        print(f"❌ Redis端口 {port} (db={db}) 连接失败")
        return False
if __name__ == '__main__':
    port=6380

    if not test_redis_port(host='192.168.8.231',port=port,password='infini_rag_flow'):
        print("所有尝试的端口都失败了")

启动带密码:

python 复制代码
import subprocess
import time
import redis
import os
import signal

def find_redis_pid(port):
    """查找指定端口的 Redis 进程 PID"""
    try:
        result = subprocess.run(['netstat', '-tulnp'], capture_output=True, text=True)
        for line in result.stdout.splitlines():
            if f":{port} " in line and 'redis-server' in line:
                parts = line.split()
                pid_part = parts[-1]  # 形如 1234/redis-server
                pid = pid_part.split('/')[0]
                return int(pid)
        return None
    except Exception as e:
        print(f"❌ 查找 Redis 进程出错: {e}")
        return None

def stop_redis_on_port(port):
    """关闭指定端口的 Redis"""
    pid = find_redis_pid(port)
    if pid:
        try:
            os.kill(pid, signal.SIGTERM)
            time.sleep(1)
            print(f"🛑 已关闭 Redis 进程 (PID={pid}) on port {port}")
            return True
        except Exception as e:
            print(f"❌ 关闭 Redis 出错: {e}")
            return False
    else:
        print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")
        return False


def test_redis_port(host='127.0.0.1', port=6380, password=None, db=0):
    """测试 Redis 是否可连接"""
    try:
        r = redis.Redis(host=host, port=port, password=password, db=db, decode_responses=True)
        r.ping()
        print(f"✅ Redis {host}:{port} 连接成功")
        return True
    except redis.AuthenticationError:
        print(f"❌ 密码错误,无法连接 Redis {host}:{port}")
    except redis.ConnectionError:
        print(f"❌ Redis {host}:{port} 无法连接")
    return False


def start_redis_on_port(port=6380, password='StrongPass123', bind_ip='0.0.0.0'):
    """启动 Redis:检测端口 → 停止旧进程 → 启动新实例"""
    try:
        # 如果已运行,先关闭
        if find_redis_pid(port):
            print(f"⚠️ 检测到 Redis 已在端口 {port} 运行,准备关闭...")
            stop_redis_on_port(port)

        # 启动 Redis
        print(f"🚀 启动 Redis ({bind_ip}:{port}) ...")
        subprocess.Popen([
            'redis-server',
            '--port', str(port),
            '--bind', bind_ip,
            '--requirepass', password,
            '--protected-mode', 'no',
            '--daemonize', 'yes'
        ])
        time.sleep(2)

        # 验证
        if test_redis_port(host=bind_ip, port=port, password=password):
            print(f"🎉 Redis 已在 {bind_ip}:{port} 成功启动 (密码: {password})")
            return True
        else:
            print(f"❌ Redis 启动失败,请检查日志")
            return False

    except Exception as e:
        print(f"启动 Redis 出错: {e}")
        return False

if __name__ == "__main__":
    start_redis_on_port(port=6380, password="infini_rag_flow")

使用配置文件启动:

python 复制代码
import subprocess
import time
import redis
import os
import signal

def find_redis_pid(port):
    """查找指定端口的 Redis 进程 PID"""
    try:
        result = subprocess.run(['netstat', '-tulnp'], capture_output=True, text=True)
        for line in result.stdout.splitlines():
            if f":{port} " in line and 'redis-server' in line:
                parts = line.split()
                pid_part = parts[-1]  # 形如 1234/redis-server
                pid = pid_part.split('/')[0]
                return int(pid)
        return None
    except Exception as e:
        print(f"❌ 查找 Redis 进程出错: {e}")
        return None

def stop_redis_on_port(port):
    """关闭指定端口的 Redis"""
    pid = find_redis_pid(port)
    if pid:
        try:
            os.kill(pid, signal.SIGTERM)
            time.sleep(1)
            print(f"🛑 已关闭 Redis 进程 (PID={pid}) on port {port}")
            return True
        except Exception as e:
            print(f"❌ 关闭 Redis 出错: {e}")
            return False
    else:
        print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")
        return False

def test_redis_port(host='127.0.0.1', port=6380, password=None, db=0):
    """测试 Redis 是否可连接"""
    try:
        r = redis.Redis(host=host, port=port, password=password, db=db, decode_responses=True)
        r.ping()
        print(f"✅ Redis {host}:{port} 连接成功")
        return True
    except redis.AuthenticationError:
        print(f"❌ 密码错误,无法连接 Redis {host}:{port}")
    except redis.ConnectionError:
        print(f"❌ Redis {host}:{port} 无法连接")
    return False
        
def start_redis_on_port(port=6380, password='StrongPass123', bind_ip='0.0.0.0'):
    """稳定方式启动 Redis"""
    conf_path = f"/tmp/redis_{port}.conf"
    conf_content = f"""
    bind {bind_ip}
    port {port}
    protected-mode no
    daemonize yes
    requirepass {password}
    """
    # 写配置文件
    with open(conf_path, "w") as f:
        f.write(conf_content)

    # 如果已有进程,先关闭
    if find_redis_pid(port):
        print(f"⚠️ 检测到 Redis 已在端口 {port} 运行,准备关闭...")
        stop_redis_on_port(port)

    print(f"🚀 启动 Redis ({bind_ip}:{port}) 使用配置文件 {conf_path}")
    subprocess.run(['redis-server', conf_path])
    time.sleep(2)

    # 测试连接
    if test_redis_port(host='127.0.0.1', port=port, password=password):
        print(f"🎉 Redis 已在 {bind_ip}:{port} 成功启动 (密码: {password})")
        return True
    else:
        print(f"❌ Redis 启动失败,请检查 {conf_path}")
        return False

if __name__ == "__main__":
    start_redis_on_port(port=6380, password="infini_rag_flow")
相关推荐
Yawesh_best3 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
V***u4533 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
Hard but lovely4 小时前
linux: pthread库的使用和理解
linux
麦麦鸡腿堡4 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
牛哥带你学代码5 小时前
服务器运行常用指令
运维·服务器
这儿有一堆花5 小时前
Kali Linux:探测存活到挖掘漏洞
linux·运维·服务器
松涛和鸣6 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
皮小白6 小时前
ubuntu开机检查磁盘失败进入应急模式如何修复
linux·运维·ubuntu
邂逅星河浪漫7 小时前
【CentOS】虚拟机网卡IP地址修改步骤
linux·运维·centos
hhwyqwqhhwy7 小时前
linux 驱动开发相关
linux·驱动开发