缓存穿透、缓存击穿、缓存雪崩及其解决方案
2023.3.29
缓存穿透
缓存穿透是指客户端同一时间使用大量的不存在的key请求,使得所有请求同时访问数据库,将数据库击溃的的情况,一般来讲,穿透的方式为两种:
- 同key多请求:使用一个不存在的key多次向服务器发送请求,这种方式的解决方案就是将请求数据库得到的null值也存放到缓存中,将其失效时间设置得短一点。
- 异key多请求:使用随机的不存在的key多次向服务器发送请求,这种方式的解决方案一般是采用
布隆过滤器
解决,当然这种方式是有弊端的,会有误判的情况;也可以采用请求数据合法性判断的方式解决,但是合法性判断的过于广泛也难以解决。
缓存击穿
缓存击穿是指客户端在某个热点key失效的时刻,发送大量该key请求,使得所有请求同时访问数据库,从而击溃数据库的情况。解决方式通常是:
- 最笨的方式,从根源上解决:取消该key失效的特性,将其设置为永久存在。
- 将其在数据库获取数据的代码加上互斥锁,使得这些请求中只有其第一个请求才能访问数据库,其他的请求就会自然的访问缓存。
缓存雪崩
缓存雪崩是指缓存中某些key在某一时间内同时失效,使得这些key的请求同时访问数据库,将数据库击溃的情况,解决方式通常是:做好数据预加载,在数据失效前,重新访问数据库并更新缓存。