Golang go-redis 包 client 返回 EOF

先叙述一下遇到的问题,一个 web 后台验证用户登录信息,通过 Redis 取 token 来获取 user ID。结果发现页面上过不了多久就有前端请求返回 401 unauthorized 的错误,但是并不会跳回登录页面,检查 session 正常。查看日志发现是通过 Redis 取 token 这一步返回 EOF 的 error。

接下来就是各种 google,看到底是为什么会有这个错误。一开始以为是超时导致的,所以打算将 client 的 timeout 设的长一些。结果发现并没有解决。

无意中在查看并重启 Redis 进程时发现 Redis 的进程号变了,再次查看代码,发现我利用 go-redis 的 NewRedisClient 获取的是一个 client 实例,该实例会从 connection pool 中获取 Redis 连接,但 Redis 重启则会导致 connection pool 中没有连接可用,所以返回 EOF。但此操作会触发 client 重新连接,所以之后一段时间页面不会返回错误,直至 Redis 再次重启。

所以问题就变成了怎么解决 Redis 不断重启的问题,查看 Redis 日志 (/var/log/redis/redis-server.log) 发现 warning 信息:

  • The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  • overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to/etc/sysctl.conf and t
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值