一、正常情况
正常情况下的流程是这样的,先查缓存,缓存无就查数据库。
二、缓存雪崩
缓存雪崩是指缓存中的数据大批量的过期 ,而查询量巨大,造成数据库压力过大而崩溃。
1、解决方法
- 尽量保证redis集群的高可用性,当发现机器坠机时尽快补上。
- 选择合适的缓存淘汰策略。
- 缓存的过期设置随机时间,防止大量数据同时过期。
- 利用redis持久化机制保存的数据尽快恢复缓存。
三、缓存击穿
缓存击穿是指缓存中没有数据,而数据库中有数据,一般是缓存中的数据过期了,然后很多用户并发查询该数据,同时在缓存中读取该数据没读取到,就同时去数据库中查,造成数据库压力过大。缓存击穿强调的是一个数据过期,同时并发去访问该数据;而缓存雪崩是强调大量的数据过期。
1、解决方法
- 设置热点数据永不过期。
- 加互斥锁。
互斥锁示例如下:
/**
* @Description: 使用互斥锁来获取数据
* @Author: caixucheng
* @