定义:原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
原理:缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
2. web缓存
扯了这么多,其实web缓存的产生和原理跟上面一样一样的:客户端浏览器在显示一个完整网页前,需要去服务器获取一些必要的数据(js,css,image等),因为浏览器的数据处理和渲染速度很快,而通过网络传输的方式去服务器取数据的过程却很慢(虽然现在网速还算比较快,下载1M的文件都用不了1s,但相较于处理器,这就非常慢了),所以页面显示出来前都有一段时间的白屏,如果每次打开相同的页面,获取相同的资源都要等待一段时间的白屏,作为用户,岂能忍。如果把已经获取过的资源存在本地,下次用的时候就不用从服务器去取了,这样速度就要快很多了。这种机制便是web缓存。
其实web缓存的优点还有很多: - 减轻服务器压力 - 减少数据传输,节省网络带宽和流量 - 缩短页面加载时间,提升用户体验
二、web缓存分类
了解了缓存的由来和原理,下面针对web缓存(以下统一简称缓存)具体介绍一下。缓存是一个抽象的代名词,用以提高访问效率而临时存储副本的机制都可以称之为缓存。我们常说的缓存,根据资源存放位置、具体用途和运行机制不同,一般可以分为:
数据库缓存
服务器缓存
客户端缓存
访问量在3W左右的话,算比较大的了。这种大型数据库服务器对cpu性能,内存容量,磁盘读写速度要求都非常高的。\x0d\x0a\x0d\x0a你可以看看国产品牌正睿的这款双路八核服务器,标配2个Xeon E5-2690八核心十六线程处理器(2.9GHz,8GT,20M缓存)、24G DDR3 REG ECC容错校验内存,SSD 512G 6Gbps高性能固态硬盘,2U热插拔机构,可以在不关机的情况下增加或更换硬盘,四个千兆网卡。如果以后随着业务量的增长,觉得性能不够用了,还可以扩展到两颗处理器,达成16颗处理核心32条计算线程(任务管理器那里可以看到32个处理器格子,相当恐怖- -~),最大支持512GB DDR3 REG ECC高速容错校验内存,怎么也够用了。\x0d\x0a产品型号:I22S2-88916RHVK\x0d\x0a产品类型:双路八核机架式服务器\x0d\x0a 处 理 器:Xeon E5-2690×2\x0d\x0a内存:32G DDR3 REG ECC\x0d\x0a硬盘:SSD 512G\x0d\x0a机构:2U机架式 \x0d\x0a价格:¥69800\x0d\x0a 银牌服务\x0d\x0a全国三年免费上门售后服务,关键部件三年以上免费质保。\x0d\x0a\x0d\x0a这个配置跑你的大型数据库怎么也够用了,CPU性能时顶级配置了,没办法再升了。硬盘是超高性能的SSD硬盘,读可以达到500MB/s,写可以达到260MB/s,如果加上3个做raid5,那读速度可以达到1200MB/s,写可以达到500MB/s左右,所向无敌。所以可以考虑增加到3个,做raid5阵列,这样既保证数据安全,又可以提升读写性能。\x0d\x0a\x0d\x0a给你推荐的是国产品牌正睿的服务器产品,他们的产品性价比很高,做工很专业,兼容性,质量之类的都有保障,售后也很完善,3年免费质保,3年免费上门售后服务,在业界口碑很不错。关于java清缓存前可以进后台方法,清完缓存不进了相关资料如下java我们在使用缓存时,往往先尝试去缓存中取值,如果没有,再去数据库取值,如果数据库也没有值,则根据业务需求,返回空或者抛异常。
如果用户一直访问一个数据库不存在的数据,比如id为-1的数据,就会导致每次请求都会先去缓存查一次,然后再去数据库查一次,造成严重的性能问题。这种情况就叫缓存穿透。
解决方案
以下几种解决方案:对请求参数做校验,比如用户鉴权校验,id做基础校验,id <= 0的直接拦截。
如果查询到数据库没有值,也将对应的key存进缓存中,value为null。这样下次查询就直接从缓存返回了。但这里的key的缓存时间应该比较短,比如30s。防止后面在数据库插入了这条数据,而用户获取不到。
使用布隆过滤器,判断一个key是否已经查过了,如果已经查过了,就不去数据库查询。
缓存击穿
缓存击穿指的是,一个key的访问量非常大,比如某秒杀活动,有1w/s的并发量。这个key在某一时刻过期,那这些大量的请求就会一瞬间到数据库,数据库可能会直接崩溃。
解决方案
缓存击穿的解决方案也有几种,可以配合使用:对于热点数据,慎重考虑过期时间,确保热点期间key不会过期,甚至有些可以设置永不过期。
使用互斥锁(比如Java的多线程锁机制),第一个线程访问key的时候就锁住,等查询数据库返回后,把值插入到缓存后再释放锁,这样后面的请求就可以直接取缓存里面的数据了。
缓存雪崩
缓存雪崩指的是,在某一时刻,多个key失效。这样就会有大量的请求从缓存中获取不到值,全部到数据库。还有另一种情况,就是缓存服务器宕机,也算做缓存雪崩。
解决方案
针对上述两种情况,缓存雪崩有两种解决方案:对每个key的过期时间设置一个随机值,而不是所有key都相同。
使用高可用的分布式缓存集群,确保缓存的高可用性,比如redis-cluster。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)