为什么使用缓存:使用缓存的好处,高性能和高并发,假设有两个用户需要去数据库里面查找同一个数据,如果没有redis,那么每一次访问都需要去数据库获取,假设访问数据库需要700ms,两次访问需要1400ms,引入redis之后,第一次访问数据库获取数据之后,就会将数据缓存到redis中,这样子第二次就不需要访问数据库,在缓存中就可以获取,假设访问redis需要50ms,那么两次查找就只需要花费750ms,这样子用户的体验就从800ms降到了50ms,这就是高性能,接下来高并发,加入我们当前系统,在某一个时间段,会出现流量激增,出现1万用户的并发,mysql正常只能支持2000个数据的一个并发,因此一万的并发请求直接来访问数据库,就会导致数据库宕机,整个系统就无法访问,那么这个时候我们可以借助redis,来进行抗压,比如我们当前用户做了一个请求,这个请求可能是高频的,请求数据库完成之后,它就会放到redis里面来,根据redis的高性能,接下来很多用户都是redis来处理,这样子访问的数据又快,并且大部分的流量都是到达redis,redis是基于内存来存储的,他是可以支持上万的并发请求,这样子并发量就提高了很多,引入redis之后,大部分的请求就走的redis放回。
引入缓存会带来什么问题:双写不一致,穿透,击穿,雪崩,并发竞争。双写不一致问题是指在mysql中的数据和在redis中的数据,在更新的过程中,他们实际上还是会有一些时间间隔,那么用户在访问这个redis返回数据呢,就可能会访问到短暂时间的旧数据,还没有来得及更新的redis,这样子就可能会产生数据不一致的问题。(1)缓存雪崩:由于大量缓存同时过期或Redis宕机,导致数据库面临巨大访问压力,这可能会对整个系统稳定性造成严重影响。(2)缓存击穿:热点数据过期导致大量请求直接访问数据库,这可能会迅速耗尽数据库资源,造成服务不可用。(3)缓存穿透:请求不存在的数据项,如果没有适当的策略,将导致数据库面临大量无效查询,增加了不必要的负载。