当前位置: 首页 > news >正文

Redis.from_url()连接redis时,redis密码带有#号报错

#在 URL 中是片段标识符(Fragment Identifier)的开始标志,如果不处理,#后面的内容会被浏览器或解析器直接忽略,导致密码被截断,连接失败。


❌ 错误示例(会出问题)

# ❌ 这样写,实际密码会变成 "abc",后面的内容全部丢失Redis.from_url("redis://:abc#123@localhost:6379/0")

实际解析结果:

  • 你以为的密码:abc#123
  • 实际解析到的密码:abc
  • #123被当成了 URL 的 fragment,直接丢弃

✅ 正确做法:URL 编码(Percent-Encoding)

#的 URL 编码是%23

fromredisimportRedis# ✅ 正确写法redis_client=Redis.from_url("redis://:abc%23123@localhost:6379/0")

🔧 推荐:使用 urllib 自动编码(最稳妥)

如果是从配置文件、环境变量里读密码,强烈建议用代码自动编码,避免手写出错。

fromurllib.parseimportquote_plusfromredisimportRedis password="abc#123"encoded_password=quote_plus(password)url=f"redis://:{encoded_password}@localhost:6379/0"redis_client=Redis.from_url(url)redis_client.ping()print("✅ 连接成功")

📌 常见需要编码的特殊字符速查表

字符含义URL 编码
#片段标识%23
@分隔符%40
:分隔符%3A
/路径分隔%2F
%本身%25
+空格%2B
(空格)空格%20

👉只要密码里有非字母数字字符,都建议直接quote_plus()


✅ 更推荐的写法(避免 URL 拼接问题)

如果你不想折腾 URL 编码,直接用参数方式(内部会自动处理):

fromredisimportRedis redis_client=Redis(host="localhost",port=6379,db=0,password="abc#123",# ✅ 原样写,最安全decode_responses=True)

📌生产环境强烈推荐这种方式,可读性最好,坑最少。


🐳 Docker / Kubernetes / 云环境注意事项

如果是从环境变量读取:

importosfromurllib.parseimportquote_plusfromredisimportRedis raw_password=os.getenv("REDIS_PASSWORD")# abc#123redis_client=Redis.from_url(f"redis://:{quote_plus(raw_password)}@redis:6379/0")

✅ 总结一句话

Redis 密码里有#,必须 URL 编码成%23,否则密码会被截断。

最佳实践:不用from_url()拼密码,改用Redis(password="xxx")参数方式。

http://www.jsqmd.com/news/1141315/

相关文章:

  • AI视频分析并发优化性能优化指南
  • 智慧农业-垂直农场/植物工厂AI Agent 发展挑战(4)
  • L9958与PIC18LF26K42实现高性能直流电机控制方案
  • 高压数字隔离与dsPIC30F在电力电子的应用
  • 向量数据库选型指南:Milvus / Qdrant / Chroma / Pinecone 实战对比,附 Python 代码
  • 想要挂号不难?来看看智能体如何重构门诊效率
  • RK3506开发板通过USB RNDIS实现网络共享配置指南
  • PIC32扩展EEPROM存储方案与I2C接口优化
  • 如何构建一个高效稳定的番茄小说下载器:从网页解析到多格式输出的完整技术实现
  • YOLOv8汽车损坏识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)
  • 小白程序员必看:AI智能体大规模落地实操指南,轻松抢占未来科技风口!
  • 计算机毕业设计之基于jsp门票收藏系统的设计与实现
  • 锂离子电池组平衡技术解析与BQ25887应用实践
  • 城通网盘限速终结者:智能解析工具的终极加速方案
  • 低代码平台的智能校验引擎:从类型推导到业务规则
  • 图像特征提取实战:从SIFT到深度学习CNN的5种方法演进与选型指南
  • EM3080-W与MKV44F64VLH16在工业条码识别中的硬件优化方案
  • 怎样3分钟解决9大网盘限速问题:高效下载的智能解决方案
  • 锂电池组均衡管理:BQ25887与PIC18F45K80的混合控制方案
  • 3步掌握VESC Tool:从零到精通的电机控制器配置指南
  • YOLOv8道路坑洼识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)
  • 电商小白必看!AI全链路赋能,教你如何降本增效,轻松玩转大模型(收藏版)
  • CS2200-CP与MK24FN1M0VDC12硬件架构与精确计时系统设计
  • 思源宋体TTF终极指南:7个字重免费商用字体如何提升你的设计效率
  • 如何在30分钟内完成OpenEMS开源能源管理系统部署:完整实战指南
  • 如何在老旧安卓电视上安装MyTV-Android:免费电视直播应用终极指南
  • Python实战DVWA暴力破解:从HTTP协议到自动化脚本实现
  • MiMo-V2.5 深度评测:参数解析与实战表现全记录
  • 基于Si4731与STM32的AM/FM收音机开发指南
  • 单细胞转录组联合蛋白组检测:突破单一组学边界,重塑细胞分群精度