使用缓存:用户访问java程序,java程序请求数据库,为了减少数据库的压力,我们在java程序和数据库之间加入缓存,并且可以进行快速的响应。
缓存雪崩:因为缓存服务挂掉或者热点缓存失效,从而导致所有的请求都去查数据库,导致数据库连接不够用或者数据库处理不过来,从而导致整个系统不可用。
数据库服务器压力大,依赖数据库的其他系统也会面临崩溃的风险。
缓存雪崩的原因:
一、高峰期大面积缓存key失效(所有车次查询全部依赖数据库)。
解决:避免缓存设置相近的有效期:即为不同key设置随机有效期,统一规划有效期,使失效时间均匀分布。减少数据库压力:使用互斥锁机制。
二、局部高峰期,热点缓存key失效(导致某一趟车次的海量请求直击数据库)。
缓存有效期机制本身的缺陷:缓存持久化,永不过期,后台任务异步更新。
优点:不阻塞线程,用户体验好,不会出现雪崩效应。
缺点:可能出现数据不一致,代码复杂度增大(每个value都需要维护异步更新代码),容易堆积垃圾数据。
解决方案一: