缓存穿透
是指查询一个缓存和数据库中都不存在的数据,每次查询都会去查询数据库。
解决方案
缓存空值,以及一些不存在ID的key,当查询这些值时直接返回null。
缓存击穿
是指查询缓存中不存在(缓存时间过期),数据库中存在的数据,当请求过来的时候,造成大量请求都直接请求数据库。
解决方案
热点数据设置永不过期。
设置互斥锁,当数据存在于缓存中时,直接返回,当数据不存在于缓存时,第一个请求去数据库拿数据,然后设置缓存,接着后面的请求都直接走缓存拿数据。
缓存雪崩
是指缓存中同一时间不同缓存数据时间同时到期,而此时大量请求过来,导致同一时间数据库压力过大,有可能引起数据库down机,这里要和缓存击穿做个区分,缓存击穿是指一条数据过期了,而缓存雪崩是指不同数据都过期了。
解决方案
缓存数据的过期时间设置随机,防止同一时间大量数据过期。
热点数据永不过期。