redis 配置学习笔记
目录
查看版本:
启动服务:
指定端口启动
python启动 redis
python 连接redis.
启动带密码:
使用配置文件启动:
查看版本:
redis-server -v
启动服务:
redis-server
默认是localhost可以访问,端口6379
指定端口启动
# 使用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
import subprocess
import time
import redis
import os
import signaldef 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-serverpid = pid_part.split('/')[0]return int(pid)return Noneexcept Exception as e:print(f"❌ 查找 Redis 进程出错: {e}")return Nonedef 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 Trueexcept Exception as e:print(f"❌ 关闭 Redis 出错: {e}")return Falseelse:print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")return Falsedef 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 Trueexcept redis.AuthenticationError:print(f"❌ 密码错误,无法连接 Redis {host}:{port}")except redis.ConnectionError:print(f"❌ Redis {host}:{port} 无法连接")return Falsedef 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)# 启动 Redisprint(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 Trueelse:print(f"❌ Redis 启动失败,请检查日志")return Falseexcept Exception as e:print(f"启动 Redis 出错: {e}")return Falseif __name__ == "__main__":start_redis_on_port(port=6380, password="infini_rag_flow")
python 连接redis.
import redis
import subprocess
import timedef 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 Trueexcept redis.ConnectionError:print(f"❌ Redis端口 {port} (db={db}) 连接失败")return False
if __name__ == '__main__':port=6380if not test_redis_port(host='192.168.8.231',port=port,password='infini_rag_flow'):print("所有尝试的端口都失败了")
启动带密码:
import subprocess
import time
import redis
import os
import signaldef 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-serverpid = pid_part.split('/')[0]return int(pid)return Noneexcept Exception as e:print(f"❌ 查找 Redis 进程出错: {e}")return Nonedef 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 Trueexcept Exception as e:print(f"❌ 关闭 Redis 出错: {e}")return Falseelse:print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")return Falsedef 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 Trueexcept redis.AuthenticationError:print(f"❌ 密码错误,无法连接 Redis {host}:{port}")except redis.ConnectionError:print(f"❌ Redis {host}:{port} 无法连接")return Falsedef 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)# 启动 Redisprint(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 Trueelse:print(f"❌ Redis 启动失败,请检查日志")return Falseexcept Exception as e:print(f"启动 Redis 出错: {e}")return Falseif __name__ == "__main__":start_redis_on_port(port=6380, password="infini_rag_flow")
使用配置文件启动:
import subprocess
import time
import redis
import os
import signaldef 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-serverpid = pid_part.split('/')[0]return int(pid)return Noneexcept Exception as e:print(f"❌ 查找 Redis 进程出错: {e}")return Nonedef 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 Trueexcept Exception as e:print(f"❌ 关闭 Redis 出错: {e}")return Falseelse:print(f"ℹ️ 未发现端口 {port} 上的 Redis 进程")return Falsedef 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 Trueexcept redis.AuthenticationError:print(f"❌ 密码错误,无法连接 Redis {host}:{port}")except redis.ConnectionError:print(f"❌ Redis {host}:{port} 无法连接")return Falsedef 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 nodaemonize yesrequirepass {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 Trueelse:print(f"❌ Redis 启动失败,请检查 {conf_path}")return Falseif __name__ == "__main__":start_redis_on_port(port=6380, password="infini_rag_flow")