还是以之前的代码为例(springboot整合redis的文章):
这是之前的代码:
这样看起来好像是没有问题的,如果并发不大的情况下也确实是这样,但是如果在并发量大的情况下,我们假设一下,同时有一万个人在访问,这一万个人同时进来了,在redsi里面没有查询到想要的值,那么就都会去查询数据库(请不要深究我的for的1,2,数据库数据现在就一条),
r如果这一万个人都去查询数据库的,一是数据库顶不顶得住,二是这样用缓存就没有意义了,反正都是查数据库,有没有缓存都一样,这种情况叫做缓存穿透,
如何解决这种情况呢,那么就不能让这些人都全部进来,没错,就是加锁,
方法一:
方法上面加锁,只让第一批人进来,其余人等待:
但是如果第一批次进来的人依然很多呢,那么数据库依然要面临很大的压力,
所以:
我们在数据库查询之前加锁,一万个人进来后,在第一个人查不到缓存的时候进入锁里面去数据库查询,其余人在外面等待,在第一个人查询完成后会将结果放入redis,第一批次进入的其余人就会在锁里面拿到值,:
第二批次进来的人就不会进入if,直接拿到redis里面的值,这样就可以避免出现redis的缓存穿透问题
ok,如果对小伙伴们有用就点个赞,毕竟写作不易嘛,有问题也可以留言哦