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

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


❌ 错误示例(会出问题)

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

实际解析结果:

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

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

# 的 URL 编码是 %23

python 复制代码
from redis import Redis

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

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

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

python 复制代码
from urllib.parse import quote_plus
from redis import Redis

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 编码,直接用参数方式(内部会自动处理):

python 复制代码
from redis import Redis

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

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


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

如果是从环境变量读取:

python 复制代码
import os
from urllib.parse import quote_plus
from redis import Redis

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

✅ 总结一句话

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

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

相关推荐
海兰4 小时前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
Devin~Y6 小时前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
海兰7 小时前
【高速缓存】 RedisVL MCP 运行指南(下)
人工智能·redis·哈希算法·高速缓存
hold?fish:palm19 小时前
kv存储主从复制的设计与实现
c++·redis·后端
不如语冰21 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
程序员天天困21 小时前
Java 项目用 Single-flight 一招终结 AI 接口重复调用
redis·后端
VX_bysjlw9851 天前
基于微信小程序的宠物用品商城系统-后端74346-计算机毕设原创(免费领源码+带部署教程)
java·redis·微信小程序·eclipse·mybatis·idea·微信开发者工具
YOU OU1 天前
Redis事务
数据库·redis·缓存
笨鸟先飞的橘猫1 天前
redis数据结构学习——stream
数据结构·redis·学习
她说可以呀1 天前
Redis集群
数据库·redis·缓存