1.缓存穿透
测试方法:通过jmeter模拟多次重复调用,单线程重复调用,查看日志结果,看执行并发请求后,所有的请求是否走向了数据库
单线程重复调用;
当数据库为空的时候,将缓存赋默认值,后续查询都将走向缓存,减少了数据库的压力,为缓存赋值为empty,第一次查询数据库为空的时候,其后的查询全部打向缓存中。
设置完成之后再次执行并发测试,每次查询请求都会命中缓存,之后的每这样就能够有效的防止缓存穿透的问题
2.缓存击穿
测试方法:对某个Key有大量的并发请求,然后从缓存中删除这个热key,模拟热key失效的场景,这个时候大量的请求就会打到数据库上,把数据库压垮。
测试步骤:
1.例如查询某个人的人名的请求,查询完成后会将数据加载到缓存中。
2.再次查询这个人的人名,命中缓存。
3.命中后持续并发(50并发请求),这时候请求全部命中缓存。
4.将这个人的人名从缓存中进行删除,以模拟缓存失效的情况。
5.50并发请求 ,这时候大量的数据请求打向数据库,缓存击穿。(如果这里加上分布式锁应该如何进行测试)
测试方法二:
在设置默认缓存的基础上,进行加锁处理操作,只有拿到第一个线程去请求数据库,然后插入缓存,每次拿到锁得时候 都需要查一下缓存中有没有。
进行设置之后再次查看日志,查看请求是否都命中了缓存,这样能够有效的防止缓存击穿。
3.缓存雪崩
测试方法:对多个使用到的缓存的接口进行并发调用,并且设置这些缓存已经过期(也就是删除缓存),调用这些接口查询缓存时无数据,此时去查询数据库,数据库的压力增大,耗时增加。
单线程多接口重复调用;
测试方法二:
为接口增加限流操作,就是当接口频繁调用的时候,增加缓存,设置一个时间,比如是3S,3S内处理一定次数的请求,超过这个接口的限制次数就会直接返回结果,不做任何处理。
4.测试指标(通过标准)(准出原则)
- 模拟缓存穿透场景,每个不存在的数据都只执行一次数据库查询,之后的请求都命中了缓存,有效防止了缓存穿透的问题。
- 模拟缓存雪崩场景,每个缓存失效的数据都只执行一次数据库查询并设置缓存,之后的请求都命中了缓存。
- 模拟缓存击穿场景,缓存失效的那个数据只有一个请求执行了数据库查询并设置缓存,其余的请求都命中缓存。
5.适用场景
-
秒杀活动
-
双11,双12大促