缓存穿透
缓存穿透是指缓存和数据库中都没有的数据。用户不断发起请求,cache拦截不了,直接使用数据库查询数据,
可能会对数据库性能造成影响。
解决方法:
1、设置key-value,value的值为null;
2、将用户请求拦截在上游;
缓存击穿
缓存击穿是指缓存中没有但数据库有的数据(一般是缓存时间到期)。由于用户特别多,同时去读取数据,
引起数据库压力瞬间增大。
解决方法:
1、设置热点数据不过期;
2、加互斥锁;
缓存雪崩
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至宕机。
和缓存击穿不同的是,缓存击穿指的是并发地查询同一条数据,缓存雪崩是指不同数据都过期了,
很多数据缓存拦截不了,从而查数据库。
解决方法:
1、分布式cache(多台服务器,每台服务器都启动了一个或多个redis服务)
1)设置随机的过期时间,防止同一时间大量的数据过期现象;
2)设置热点数据永不过期;
3)使用分布式缓存,将热点数据均匀分布在不同的缓存数据库中。