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")
相关推荐
红尘客栈23 小时前
K8S基本命令操作
linux·容器·kubernetes
阑梦清川3 小时前
linux网络基础
linux
我梦之64 小时前
libevent输出缓存区的数据
服务器·网络·c++·缓存
春生野草4 小时前
MobaXterm远程连接云服务器及配置jdk、Tomcat环境
运维·服务器
一人の梅雨5 小时前
京东商品详情深度解析:从接口调用到商业价值挖掘的技术实现
服务器·数据库·php
月墨江山5 小时前
Ubuntu 20.04 使用 Issac Gym 进行宇树G1人形机器人进行强化学习训练(Linux仿真)
linux·ubuntu·机器人
wanhengidc6 小时前
云手机的挂机功能涉及到哪些内容
运维·服务器·网络·游戏·智能手机
努力的白熊嗨6 小时前
多台服务器文件共享存储
服务器·后端
天朝八阿哥6 小时前
关于xfce4-pulseaudio-plugin中文翻译的bug
linux·debian