redis + sql server 排行榜并发优化

一、场景介绍
公司要做这3类排行榜,分数排行榜,金币排行榜,输赢排行榜。然后这3类排行榜要分今天的和昨天的,输赢排行榜的数据要从mongoDb里面统计读取。数据库用的是sql server ,语言是php7.2,要求是3000的并发量。
二、初步思路
1.建立的数据表
用户表,框出来的就是要排名的榜
2.建立定时任务 每天0点 运行如下存储过程 把昨天的数据清零初始化
UserID 大于等于999999899 的是机器人
将今天的输赢以及单次赢最大的数据更新到昨天的输赢以及单次赢最大上面去,并且把今日的除了score外的数据清0
3.建立定时任务 每30分钟去mongodb统计用户的总输赢等(记录最后一次读取的位置,下次读取的时候从此处往下读)
统计输赢到数据库
4.前端来获取用户的排行榜的时候去根据类型去计算用户的排名 以及前100名的人员的昵称和分数

三、并发测试
空载状态
空载状态
1.apache-jmeter-5.2.1 测试100个并发 5分钟 12万个请求 cpu 和 负载瞬间上100 下面是测50个并发
这次只压了50个
图一  指出来的是请求数
图二  纵坐标是毫秒数
这次只用了50个并发效果不是特别明显 ,100个的话负载和cpu绝壁100%
四、针对排行榜的优化
1.每一天0点的计划任务不变
2.还是每30分钟去统计用户的输赢到用户表中,然后把每个类型的排行榜前100名取出来并存入Redis,然后根据最后登录时间来算出每个活跃用户的排名数据存入Redis
3.客户端来请求的时候直接把Redis的数据取出来丢给它
五、优化之后能够达到200个并发 负载有所减缓,但是cpu依然是100% 感觉变化不是很大
六、问题
1.像这种排名的数据能够丢到redis还算好,但是像其它不好放进缓存的数据接口怎么办呢?
2.我50个并发访问sqlserver数据库的时候数据库服务器已经卡得不要不要的了 5分钟请求数12万,(只从一张10条数据的表里面查了一条数据)
3.是我使用有问题吗,记得数据库不是最少都是好几万的并发吗?
七、欢迎大神留言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值