其他分享
首页 > 其他分享> > 缓存怎么测试

缓存怎么测试

作者:互联网

查询怎么测试缓存时,发现的非常棒的文章。http://www.51ste.com/share/det-762-1.html

以下为原文:

什么是缓存?

缓存是我们在生活中经常听到一个词,如 怎么清理浏览器的缓存, 手机空间不够了,得删除缓存, 硬盘的缓存是不是越大越好等等的问题;

其实这些 缓存可以分成3种:

后两种更像是一种技术或者是服务;

小结

缓存是临时存放数据(使用频繁的数据)的地方,介于外部请求和真实数据之间;


为什么要用缓存

从一个用户的角度来看,体验最好的肯定是不管什么情况下,都能成功访问这个页面,并且打开的速度很快,也就是保证正常工作的前提下时间尽可能短;

如果没有缓存,我们的体验可能是这样的:

用户请求一个数据,这个数据得从数据库中去取,随着用户越来越多和数据量越来越大,每次用户请求的时间就会越来越长,而且数据库无时不刻都在工作;

这样用户和数据库都很痛苦,时间一长,就有可能发生下面两件事情:

1)用户很烦,抱怨页面加载太慢或者打不开,最后放弃了这个应用;

2)数据库满负荷工作,偶尔崩溃(导致页面错误);

分析原因:由于数据库的连接数和连接时长是有限制的,但请求过多,超出了数据库能承受的范围,导致数据库崩溃;

那为什么不把一部分数据放在别的地方,这样有用户请求这些数据时,就不用从数据库中取了?


服务器缓存

工作原理

当客户端向服务器请求一个资源时,服务器首先在缓存中找,如果在缓存中,那么直接返回,不需要连接数据库;

如果请求的资源不在缓存中,这时再去数据库中找,找到后返回给客户端,并将这个资源加入缓存中;

这样下次请求相同资源时,就不需要连接数据库了。而且如果把缓存放在内存中,因为对内存的操作要比对数据库操作快得多,这样请求时间也会缩短;

所以,通过使用缓存,就可以保证满足用户的需求,在正常工作的前提下响应时间尽可能短;

特别需要注意缓存失效的场景,如:

 


前端缓存

类型

缓存分为两类:强制缓存和协商缓存,定义如下:

缓存由什么决定?

缓存由http报文的内容决定,关系如下:

 

max-age或者 expires都决定了缓存的过期时间,会使客户端再次请求数据时先判断缓存是否过期,未过期则直接从缓存中读取数据(强制缓存);

两者的区别是前者是个相对值,相对于客户端的时间,后者直接定义了截止时间,且相对于服务端的时间;

协商缓存由 Last-Modified、 If-Modified-Since 或 ETag、 If-None-Match两组报文决定;

字段的意思分别如下:

缓存的总体过程

首次请求资源:

 

非首次请求资源:

 

在第一次请求资源后,浏览器会将资源连同响应报文一起缓存到本地,其中响应报文可能包含了关于缓存的头信息;

因而后续请求的时候,浏览器可以根据本地缓存的头信息知道资源的缓存决策,判断是否强制缓存,或者移交服务器判断是否协商缓存;


缓存穿透、缓存击穿、缓存雪崩

在服务器缓存里面,有3个特殊的名词:缓存穿透、缓存击穿、缓存雪崩

这3个到底是什么?

缓存穿透

正常情况下,查询的数据都存在,如果请求一个不存在的数据,也就是缓存和数据库都查不到这个数据,每次都会去数据库查询,这种查询不存在数据的现象称为缓存穿透;

穿透带来的问题

如果每次都拿一个不存在的id去查询数据库,可能会导致你的数据库压力增大;

如何发现缓存穿透

解决办法--缓存空值

之所以发生穿透,是因为缓存中没有存储这些数据的key,从而每次都查询数据库;

可以为这些key在缓存中设置对应的值为null,后面查询这个key的时候就不用查询数据库了;

当然为了健壮性,我们要对这些key设置过期时间,以防止真的有数据;

缓存击穿

在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失效了或者不存在,就会导致同一时间,这些请求都会去查询数据库,这样的现象称为缓存击穿;

比如请求一些特殊字符,就会出现该情况;

引起的原因

带来的问题

会造成某一时刻数据库请求量过大;

解决办法

采用分布式锁,只有拿到锁的第一个线程去请求数据库,然后插入缓存,若其它线程获取锁失败,则等待一段时间后重试;

缓存雪崩

当某一时刻发生大规模的缓存失效的情况,比如缓存服务宕机了;

解决方法

跟缓存穿透一样加锁排队;

建立备份缓存,缓存A和缓存B,A设置超时时间,B不设置超时时间,先从A读缓存,A没有则读B,并且更新A和B的缓存;

解决热点数据集中失效问题

在设置缓存的时候,一般会给缓存设置一个失效时间,过了这个时间,缓存就失效了;

对于一些热点的数据来说,当缓存失效以后会存在大量的请求过来,然后打到数据库去,从而可能导致数据库崩溃的情况;

解决办法


缓存的测试点

功能:

自动化:

性能及稳定性:

扩容:

环境:

无网络&有数据:

无网络&无数据:

有网络&有数据:

有网络&无数据:

缓存存储:

异常情况:

 

标签:怎么,缓存,请求,数据库,缓存数据,测试,数据,客户端
来源: https://www.cnblogs.com/duwei2325/p/14888484.html