昨天面试的几个 MySQL 和 Redis 的题目,来请教一下

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

返回顶部