项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?
面试题
在本项目中,缓存是如何实现的?采用缓存机制有什么优势?为了避免出现这些问题,请谨慎设计您的缓存机制。
面试官心理分析
这一问题在圈内是个热门话题,在IT行业尤其重要。对于缓存的基本概念还不是很清楚的人群来说,在面对这一技术难题时确实会感到有些无奈或尴尬。
当人们询问缓存时(即一提到缓存),最常问的问题通常是项目中哪些地方采用了缓存技术以及为什么要采用缓存技术?如果不采用缓存会带来什么样的影响?使用后可能带来的负面效果是什么?
这其实就是在考察你对缓存机制的本质理解程度。如果只是机械地套用了缓存功能而缺乏深入理解,在技术面试中很难获得令人满意的表现。
面试题剖析
项目中缓存是如何使用的?
这个,需要结合自己项目的业务来。
为什么要用缓存?
用缓存,主要有两个用途:高性能 、高并发 。
高性能
假设这样一个情况:当一个请求送达后,在对mysql执行一系列繁琐的操作后(费力不讨好),耗时约六百余毫秒获得结果。然而这些结果可能在短时间内不会发生变化(或许一段时间内无需反馈),那该怎么办呢?
缓存机制确实很有用哦!它耗时600毫秒就能获取数据,并将结果存储在缓存中。每个键对应一个值。下次有其他人查询时,请直接从缓存中获取数据而不是去mysql那里耗时600毫秒。直接从缓存中获取数据后仅需2毫秒就能完成查找操作,并且整体性能提升了3倍以上
换句话说,在处理那些需要耗时进行复杂查询以获取结果的任务时,在观察到后续的变化不大且存在大量的读取请求的情况下,则可以通过将查询得到的结果缓存在内存中,并在后续直接从缓存中进行读取。
高并发
这个MySQL数据库非常沉重。根本没法实现高并发设计。但其实也可以运行。然而其单机性能表现不佳。MySQL在单机环境下达到每秒两千次并发(2000QPS)时也会出现性能警报。
如果你有一个系统,在高负载压力下每秒会有超过一万的请求输入的情况下,单机环境下的MySQL服务器在这种情况下可能会不堪重负。此时建议部署分布式缓存系统,并将大量数据存储到分布式缓存中而不是直接放置到MySQL数据库中。由于缓存机制相对简单且高效(如key-value式操作),单机环境下可处理数千至数万至数十万次/秒的数据流完全没有问题,并且能够轻松应对高并发场景。相比于MySQL单机环境而言,分布式缓存系统的承载能力要高出几十倍
缓存是走内存的,内存天然就支撑高并发。
用了缓存之后会有什么不良后果?
常见的缓存问题有以下几个:
点击超链接,可直接查看缓存相关问题及解决方案。
