高并发40问学习笔记
1.缓存穿透缓存穿透是指大量访问不能在缓存中命中需要去数据库访问但数据库能支持的访问量是有限的如果缓存命中率可能下降1%都会影响数据库的可用性。解决缓存穿透最简单的方式是限制请求的数量然后对于一个具体的问题查找用户信息如果大量对未注册信息的查找缓存不能命中直接就去数据库查找会造成大量访问的问题。一种解决思路是缓存中存储有的用户信息比如key或者对于一次查找不存在的用户在查找不存在之后就在缓存中存储不存在的用户这样就可以当一个人反复查找相同的不存在的用户的时候只有第一次会去访问数据库之后都在缓存层被阻挡了。更好的解决思路是使用布隆过滤器布隆过滤器能告诉我们有哪些哪些不存在而使用的空间会缩减几十倍布隆过滤器的特点是判断存在的有可能不存在但是判断不存在的就一定不存在这是可以接受的错误如果反过来的话判断了不存在我们也不能保证真的不存在仍然需要去数据库确定。2.缓存可用性问题从客户端、中间件、服务端三个角度去考虑在客户端可以采用多缓存分布式的方式这样可以避免缓存故障造成缓存不可用也可以降低单一缓存的访问量。中间件可以控制对数据库的直接访问量。在服务端可以通过监控节点的可用性控制在redis中有哨兵集群的概念多个哨兵通过消息是否能得到回复判断主库是否下线然后使用少数服从多数的原则来选择新的从库成为主库通知其他从库新主库的存在。3.消息队列消息队列是把任务放在队列中具体场景就是秒杀的情况对于一个电商平台平时的写访问是每秒100条而当办秒杀活动的时候可能临时的突发访问是一万是十万是不能被承受的如果为了这种情况单独设计分库分表的内容然后在活动之后缩减是很浪费的这种突发情况很长时间才会发生一次且发生时间比较短。消息队列的功能有解耦、异步响应、削峰填谷使用消息队列队列后边的任务是有一定的延迟的只要延迟是可以接受的就可以使用消息队列比如在秒杀系统用户是接受等几秒等几十秒的使用消息队列解耦则是两个不同的系统通信如果直接调用接口通信如果对方的api更改我们的处理代码也要做对应的更改如果使用消息队列可以把数据放在消息队列上由对方需要的时候去获取数据。4.总结对于缓存命中率下降的影响我之前没有认识到重要性然后布隆过滤器我是在数据结构与算法之美学的是算多个哈希。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414029.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!