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")
相关推荐
爱吃生蚝的于勒16 分钟前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森29 分钟前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
期待のcode43 分钟前
Redis的主从复制与集群
运维·服务器·redis
翼龙云_cloud1 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~1 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
REDcker1 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc
冉佳驹1 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
陌上花开缓缓归以2 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
江湖有缘2 小时前
零基础入门:使用 Docker 快速部署 Organizr 个人主页
java·服务器·docker