最近工作上遇到个问题,从用户A切换到用户B,结果用户B显示的还是用户A的数据;
问题的原因很简单,用户B使用的还是用户A的缓存数据,解决方案也很简单,独立保存一份缓存即可;
但是,不由的想问,缓存测试这块,需要注意什么?
什么是缓存?
缓存是我们在生活中经常听到一个词,如 怎么清理浏览器的缓存, 手机空间不够了,得删除缓存, 硬盘的缓存是不是越大越好等等的问题;
其实这些 缓存可以分成3种:
- 一种指硬件上的,像硬盘缓存和CPU缓存;
- 一种客户端缓存;
- 一种是指服务端缓存;
后两种更像是一种技术或者是服务;
- 硬件缓存:指的是一块芯片,可以被集成到硬盘或者是CPU上。它的作用就是充当硬盘(CPU)与外界接口(通常是内存)之间的暂存器,利用缓存可以减轻系统的负荷,同时提高数据的传输速率;
- 客户端缓存:某些应用,如浏览器,X宝,X信等,为了实现能够快速响应用户的请求,会把用户之前浏览的东西(如图片等)存在本地;在下次访问时,如果本地的缓存里有请求的内容,那么就直接展示出来,不用再次向服务器请求;
- 服务端缓存:它与客户端缓存目的相同,只不过是站在服务器这边考虑的;如果每次接到客户端请求都要连接一次数据库,当用户请求多的时候,负载过大;这时可以把一些经常被请求的数据存放在内存中,当有请求时直接返回,不用经过数据库,这样就可以减轻数据库的负担;
小结
缓存是临时存放数据(使用频繁的数据)的地方,介于外部请求和真实数据之间;
为什么要用缓存
从一个用户的角度来看,体验最好的肯定是不管什么情况下,都能成功访问这个页面,并且打开的速度很快,也就是保证正常工作的前提下时间尽可能短;
如果没有缓存,我们的体验可能是这样的:
用户请求一个数据,这个数据得从数据库中去取,随着用户越来越多和数据量越来越大,每次用户请求的时间就会越来越长,而且数据库无时不刻都在工作;
这样用户和数据库都很痛苦,时间一长,就有可能发生下面两件事情:
1)用户很烦,抱怨页面加载太慢或者打不开,最后放弃了这个应用;
2)数据库满负荷工作,偶尔崩溃(导致页面错误);
分析原因:由于数据库的连接数和连接时长是有限制的,但请求过多,超出了数据库能承受的范围,导致数据库崩溃;
那为什么不把一部分数据放在别的地方,这样有用户请求这些数据时,就不用从数据库中取了?
服务器缓存
工作原理
当客户端向服务器请求一个资源时,服务器首先在缓存中找,如果在缓存中,那么直接返回,不需要连接数据库;
如果请求的资源不在缓存中,这时再去数据库中找,找到后返回给客户端,并将这个资源加入缓存中;
这样下次请求相同资源时,就不需要连接数据库了。而且如果把缓存放在内存中,因为对内存的操作要比对数据库操作快得多,这样请求时间也会缩短;
所以,通过使用缓存,就可以保证满足用户的需求,在正常工作的前提下响应时间尽可能短;
特别需要注意缓存失效的场景,如:
- 数据库的数据已经更新了,那对应的缓存数据也要更新;
- 缓存超过失效时间,需要重新发起请求来更新缓存;
- 缓存满了,比如缓存满了,重新发起请求,新的资源重新加入缓存,一般做法是把缓存里最旧的资源剔除,加入新的资源;
前端缓存
类型
缓存分为两类:强制缓存和协商缓存,定义如下:
- 强制缓存:客户端直接从缓存中读取数据,不与服务器作交互;
- 协商缓存:客户端发送特定的报文到服务器,服务器根据接收到的报文判断资源是否有更新,有则返回200和最新的资源文件,无则返回304使客户端从缓存中读取数据;
缓存由什么决定?