目录
[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")