1.MySQL 里的记录有这么两个字段: 课程 id,课程余额 同时间大量学生抢同一门课,如何设计这个功能? 2.线上 Redis 内存满了,应该如何处理? 3.你认为解决高并发问题的本质是什么? 求大佬赐教 orz Redis 内存满了这个问题,应该问的是满了之后的处理方案
@hoythan 1.我:我说这是一个热点行数据争用锁的问题,可以把一行课程数据分成多行,减少行锁争用 面试官:这样增加编程复杂度,而且性能也不会高 我:可以把课程数据放到 Redis 里,用 lua 脚本来做,lua 脚本里判断课程余额,减少余额 我说完就问下一题了,但是我觉得是不是有更好的方案?这个问题就用 Redis 感觉问的价值不高呀 2.完全没思路 3. 我:大部分系统瓶颈都在数据库 IO 上,一般可以 NIO 这类技术避免 IO 等待 他没怎么说话,我感觉也不是这个答案
有没有可能有的点没放出来就是在等你聊?等你一步一步和他确认出问题? - 比如什么业务场景下 redis 内存满了?是跑起来就满了还是突然就满了? - 比如什么情况下的高并发?是类似抢课造成的并发?还是中台或者什么情况下造成的高并发? - 不同的业务场景给他不同的回答
2. 先扩容保证服务可用,根据业务选择合适的缓存淘汰策略,如果是上线后引起的,能回滚先回滚,然后排查代码看下是否是正常内存占用(过期时间设计是否合理等等) 3. 个人认为是性能与事务(一致性)的 tradeoff
第一个直接弄一个 key ,decr 做减法不就好了么,还是我想的简单了 第二个内存满了,可以停机和不可停机有不同的处理方法,最简单的删除一些内容,这里面有个专业术语 淘汰策略,事后扩容或者集群 第三个 在高效率的情况下避免程序出现问题