假设:现在有一万个人同时请求,刚开始的时候,Redis中没有我们想要的数据,Redis是在内存中操作的,承载压力大约10万,没什么问题。当get不到的时候,代码继续向下走。
代码走到查询数据库,一万人同时请求数据库,会瞬间造成数据库服务器压力增大。请求更多的话,有可能造成数据库卡死或崩掉。这就是缓存穿透问题,简单来说就是请求击穿了缓存直接请求数据库,造成数据库压力。
解决思路:当一个人请求过来时,从数据库查出放到Redis中,剩下的人直接去取缓存就OK。
解决方法:
1.最简单的一种方法。用synchronize锁机制
缺点:一万个人过来,都要排队进行查询。效率很低!!!
2.改进一下,使用双层检测同步锁,只需要进入一次数据库获取数据