首页/数据/Redis 进阶速查/unixsocket:本机调用的低延迟通道
性能与排障129 条

unixsocket:本机调用的低延迟通道

同机客户端可经 Unix 域套接字连接(unixsocket 配置路径),免去 TCP 栈开销,延迟更低;权限通过 unixsocketperm 控制。

Redis 进阶速查数据更新于 2026-10-13

unixsocket 是什么

Redis 除了 TCP 端口,还能监听 Unix 域套接字:同机客户端通过文件路径连接,省掉网络栈与握手开销,延迟更低,而且不占端口、不受对外网络策略影响。套接字文件只在本机命名空间可见,权限由 unixsocketperm 控制;它与 TCP 端口可以同时开启,常见做法是对外走端口、对内走套接字。

基本信息

服务端配置unixsocket /path/to/redis.sock
权限配置unixsocketperm,生产建议显式设为 700
客户端用法redis-cli -s /path/to/redis.sock
与 TCP 关系可同时监听,互不影响
可见范围仅本机同一命名空间,跨机必须用 TCP
识别方式CLIENT LIST 的 addr 会显示套接字路径

典型使用场景

  • 同机应用访问:延迟敏感且不跨机的业务走套接字,避开网络栈
  • 攻击面收敛:不对外开放端口,仅保留本机套接字
  • 容器混部:共享挂载目录让容器内的应用连上宿主实例
  • 延迟对比:对延迟敏感的服务做 TCP 与套接字的对比测试
  • 容器化排障:连接失败时先查挂载路径与文件属主

最小示例

最小示例
# redis.conf 中的相关配置
unixsocket /run/redis/redis.sock
unixsocketperm 700

redis-cli -s /run/redis/redis.sock PING              # 用套接字连接
redis-cli -s /run/redis/redis.sock INFO clients      # 连接统计
ls -l /run/redis/redis.sock                          # 确认属主与权限位
sudo -u appuser redis-cli -s /run/redis/redis.sock PING   # 以业务身份验证权限

常见现象与处理

现象常见原因处理
连接报权限不足权限位或文件属主不匹配调整 unixsocketperm 与运行用户
找不到套接字文件路径被清理或未挂载进容器换到持久目录,确认挂载与路径一致
重启后客户端连不上套接字文件被重建,客户端仍持旧连接让客户端重连,并确认路径未变
日志无异常但偶发失败安全模块拦截访问检查 SELinux 或 AppArmor 策略是否放行
套接字文件只在同一命名空间可见:容器要共享同一路径的挂载卷,且容器内运行用户的 uid 要与文件属主匹配,否则会收到权限错误。
套接字与 TCP 端口并存时,排障要区分连接来源:CLIENT LIST 里 addr 显示为套接字路径的是本机连接,显示 IP 与端口的是网络连接。

易错点

  • 权限设置过宽:本机任意用户都能连上实例,等于把数据敞开
  • 把套接字放在会被定期清理的临时目录:路径消失后连接突然失败,重启也一样
  • 容器只挂载了目录却没对齐属主:容器内进程因 uid 不匹配收到权限错误
  • 以为套接字能跨机使用:它只在本机命名空间可见,跨机访问必须走 TCP
  • 改了路径忘记同步客户端配置:表面看像实例故障,实际只是路径不一致

数据来源与参考

  • Redis 官方文档:Unix socket 配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌