2021-03-05

golang 踩的坑

defer机制下的 lock unlock

4核16G
阿里云redis
阿里云mongo
阿里云zk

最近项目快上了 然后出现了 4000人压测 单服登陆过慢。。1min 以上 查了下 发现是

lock()
defer unlock()
操作redis mongo

在申请lock 前 等待时间过长
一开始 意味是defer存在性能问题
查找官方API
发现 go 1.13 优化了defer性能 提高30% 恰巧项目版本是1.12 果断升级一下
然而 并没有有效的解决问题* 1min左右

然后我就继续排查
底层获取redis数据 使用 Get方法

嗯 HGET读比GET快哦 我登陆是读

把GET SET 修改为 HGET HSET

40s左右

再查 登陆有多次redis 交互 获取白名单 维护状态
redis是单线程 读取速度达到百万级 看似并发
减少redis的交互 改主要是 白名单 维护状态 为zk读取

35s左右

哦吼 提高redis的速度能解决 那就压缩数据看看

var in bytes.Buffer   //js 数据压缩
w := zlib.NewWriter(&in)
w.Write([]byte(persistData))
w.Close()
this.redisClient.HSet(getUserDataKey(uid), "", in.String() )

30s左右

继续加油把。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值