机构组织网站建设,怎么建立和设计网站,实木餐桌椅移动网站建设,python购物网站开发流程图1.背景缓存的使用一定是今后开发中100%会用到的技术#xff0c;尤其是Redis相关的问题#xff0c;如果面试官不问我我几个缓存相关的问题#xff0c;那我觉得我可能是去了个假的互联网公司。这里考虑到有些初学者刚刚出校园或者自学中#xff0c;准许我多费口舌介绍下关于缓… 1.背景缓存的使用一定是今后开发中100%会用到的技术尤其是Redis相关的问题如果面试官不问我我几个缓存相关的问题那我觉得我可能是去了个假的互联网公司。这里考虑到有些初学者刚刚出校园或者自学中准许我多费口舌介绍下关于缓存的基础知识我们买电脑的时候关心三个比较重要的参数1.CPU or GPU 型号。2.内存大小。3.硬盘大小。这三个硬件直接决定你电脑性能的好坏。两个最关键的因素就是 CPU 和 内存如何衡量一个CPU的好坏这是我日常开发用的电脑我们发现有三个关于内存的参数L2 缓存每个核心 256 KBL3 缓存6 M内存16 G缓存和内存的大小是决定你电脑性能的重要参数我们都知道内存价格远高于磁盘高速缓存L2/L3价格高于内存。速度寄存器 高速缓存(SRCM) 内存(DRAM) 磁盘(SSD HDD)画图工具VisualParadigm缓存概念“Cache一词来源于1967年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义用于计算机工程领域。当CPU处理数据时它会先到Cache中去寻找如果数据因之前的操作已经读取而被暂存其中就不需要再从随机存取存储器Random Access Memory中读取数据——由于CPU的运行速度一般比主内存的读取速度快主存储器周期访问主存储器所需要的时间为数个时钟周期。因此若要访问主内存的话就必须等待数个CPU周期从而造成浪费。提供“缓存”的目的是为了让数据访问的速度适应CPU的处理速度其基于的原理是内存中“程序执行与数据访问的局域性行为”即一定程序执行时间和空间内被访问的代码集中于一部分。为了充分发挥缓存的作用不仅依靠“暂存刚刚访问过的数据”还要使用硬件实现的指令预测与数据预取技术——尽可能把将要使用的数据预先从内存中取到缓存里。CPU的缓存曾经是用在超级计算机上的一种高级技术不过现今计算机上使用的的AMD或Intel微处理器都在芯片内部集成了大小不等的数据缓存和指令缓存通称为L1缓存L1 Cache即Level 1 On-die Cache第一级片上高速缓冲存储器而比L1更大容量的L2缓存曾经被放在CPU外部主板或者CPU接口卡上但是现在已经成为CPU内部的标准组件更昂贵的CPU会配备比L2缓存还要大的L3缓存level 3 On-die Cache第三级高速缓冲存储器。面试官你过去的项目中使用了缓存技术吗哪些业务场景使用了分析不管是C端还是B端业务场景都会使用缓存如果系统设计不会使用缓存那实在是无法说服面试官发offer出来使用缓存优势就是快缺点是速度越快价格越昂贵传统的基于硬盘存储的Mysql已经无法满足现有互联网公司的流量为了提高系统的性能应对大流量高并发cache 在企业里也有也会广泛应用。我项目中我主要在4个地方使用到缓存CDN代理本地缓存分布式缓存CDN 广泛应用于网站与应用加速、游戏加速、音视频点播、文件等场景通过高性能缓存机制静态加速静态资源如各类型图片、css、js小文件等提高访问效率和资源可用性。代理在前面的小节讲到 《Nginx下的负载均衡》 Nginx 可作为 http 缓存工具。后面的章节主要围绕“本地缓存”和“分布式缓存”重点介绍应用层缓存的使用因为作为开发工程师应用层你接触相对比较多。缓存分布图缓存使用场景使用缓存通常考虑两种情况短时间内相同数据重复查询多次且数据更新不频繁这个时候可以选择先从缓存查询查询不到再从数据库加载并回设到缓存的方式。此种场景较适合用单机缓存。高并发查询热点数据后端数据库不堪重负可以用缓存来扛。具体应用场景排行榜相关的问题如新浪微博热门话题榜百度当前热搜榜一定是在缓存了。热门商品列表计数问题的功能比如记录网站访问次数或用户访问ip个数。4.常用缓存框架在应用服务器本地缓存着热点数据应用程序可以在本机内存中直接访问数据而无需访问数据库。在Java里本地缓存就是缓存在JVM所在主机的内存中常规设计中本地缓存处于分布式缓存上一层客户端请求优先查询本地缓存如果本地缓存未命中再去查找 Redis如果 Redis 依旧没命中最后查找数据库。也可以直接设计分布式缓存数据库两层架构。本地缓存流行框架Guavn Cache Google开源的Java重用工具集库Guava里的一款缓存工具。Ehcache非常流行的纯Java开源缓存框架使用简单高速实现线程安全的缓存管理类库。编程语言自带数据结构如 Java 的 HashMapCurrentHashMap 等。Spring 缓存Spring 全家桶无所不能如果你的项目组人少事儿多Spring Cache 或许是不错的选择。分布式缓存流行框架Reids一个远程非关系型内存数据库Memcached应用较广的开源分布式缓存产品之一阿里Tair阿里开源产品Redis 是当前最流行的分布式缓存框架企业广泛使用也是面试中要求较高的每个程序员都必须了解掌握后面会针对 Redis 详细介绍。为什么要使用缓存在高并发请求时为何我们频繁提到缓存技术最直接的原因是磁盘IO及网络开销是直接请求内存IO千百上千倍做个简单计算如果我们需要某个数据该数据从数据库磁盘读出来需要0.0045S经过网络请求传输需要0.0005S那么每个请求完成最少需要0.005S该数据服务器每秒最多只能响应200个请求而如果该数据存于本机内存里读出来只需要100us那么每秒能够响应10000个请求。通过将数据存储到离CPU更近的位置减少数据传输时间提高处理效率这就是缓存的意义。下图是小编工作中负责过的一个风控系统在日常24H中 Redis集群 QPS 曲线图从业务低峰期几千或晚高峰最高30W一个 Redis 集群都可轻松应对30W QPS 在大型系统中流量并不算高且不是核心系统如果在多几倍几十倍多流量一个结构优良的 Redis 集群都可轻松应对这充分说明了我们为什么要使用缓存缓存可以把系统系统响应能力提高N个数量级远高于传统基于硬盘的关系型数据库。所以学会在系统中设计使用缓存也是企业招聘时要求工程师必会的技能。image-201908122034023665.关于缓存的一些算法常用缓存数据淘汰策略缓存是非常宝贵的资源不能把所有数据都放入缓存只能把最重要的或者要求查询速度最快的数据缓存起来比如微博热门话题排行榜功能通常使用缓存查询而不是数据库。FIFOFirst In First Out 先进先出算法即先放入缓存的先被移除。LRULeast Recently Used 最近最少使用算法使用时间距离现在最久的那个被移除。LFULeast Frequently Used 最不常用算法一定时间段内使用次数频率最少的那个被移除。缓存数据更新策略定时任务从数据库直接更新缓存适用于对时间不敏感的数据。查询时写缓存即查询优先查询缓存若缓存未命中查询数据库将返回结果写入缓存数据更新时先 delete 缓存再更新缓存。MQ 消息异步更新缓存后文中会针对MQ的应用做单独讲解。6.总结思考关于缓存淘汰策略和更新策略各自有什么优点有什么缺点读者可以作为延伸学习。为什么要了解每种策略的优缺点工作中业务场景千差万别只有知道不同策略的优缺点才能知道哪种策略最适合当前的业务场景。高并发网站后台一定离不开缓存的使用所以面试中要求工程师必须掌握。关于缓存常见面试题举例为什么使用缓存有什么优点Redis 与 Memcached 区别。缓存更新策略 淘汰策略。关于 Redis 的知识点如 Redis 常用数据结构持久化策略线程模型等。参考资料维基百科:https://zh.wikipedia.org/wiki/缓存美团点评技术博客:https://tech.meituan.com/联系我VX搜索【转行程序员】回复”加群“我会拉你进技术群。讲真的在这个群哪怕您不说话光看聊天记录也是一种成长。阿里/腾讯/百度资深工程师、Google技术大神、IBM工程师、还有我王炸、各路大牛都在有任何不明白的都进群提问。