一.缓存穿透
如果缓存和数据库中都不存在的数据,比如数据库某个物品编号只到8000,而有人恶意的访问一个不存在的编号,一直访问10000编号,那么在数据库和缓存中都不存在,在高并发情况下,会不停查询数据库,造成数据库压力大。
解决:
把空结果也加入缓存,设置短暂过期时间
二.缓存雪崩
雪崩是指在某一时间,在缓存中我们放置的大量的key同时失效,则大量的请求全部直接到达数据库,造成数据库压力过大。
解决:
在原有失效时间上加一个随机值,比如1-5分钟,这样可以防止缓存集体失效
三.缓存击穿
缓存击穿 指 并发查同一条数据。缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
解决:
查询时加锁,大量的并发只让一个人去查数据库,其他请求等待,查询放入缓存之后释放锁,这样其他请求就可以从缓存中获取数据,不用去查数据库。
**区别:**缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。