一、缓存使用原则
什么时候,什么样的数据能够保存在Redis中?
1.数据量不能太大
2.使用越频繁,Redis保存这个数据越值得
保存在Redis中的数据一般不会是数据库中频繁修改的
二、缓存淘汰策略
Redis将数据保存在内存中, 内存的容量是有限的
如果Redis服务器的内存已经全满,现在还需要向Redis中保存新的数据,如何操作,就是缓存淘汰策略
三、缓存穿透
什么是缓存穿透:
所谓缓存穿透,就是一个业务请求先查询redis,redis没有这个数据,那么就去查询数据库,但是数据库也没有的情况
正常业务下,一个请求查询到数据后,我们可以将这个数据保存在Redis
之后的请求都可以直接从Redis查询,就不需要再连接数据库了
但是一旦发生上面的穿透现象,仍然需要连接数据库,一旦连接数据库,项目的整体效率就会被影响
如果有恶意的请求,高并发的访问数据库中不存在的数据,严重的,当前服务器可能出现宕机的情况
解决方案:业界主流解决方案:布隆过滤器
布隆过滤器的使用步骤:
1.针对现有所有数据,生成布隆过滤器,保存在Redis中
2.在业务逻辑层,判断Redis之前先检查这个id是否在布隆过滤器中
3.如果布隆过滤器判断这个id不存在,直接返回
4.如果布隆过滤器判断id存在,在进行后面业务执行
四、缓存击穿
什么是缓存击穿:
一个计划在Redis保存的数据,业务查询,查询到的数据Redis中没有,但是数据库中有
这种情况要从数据库中查询后再保存到Redis,这就是缓存击穿
但是这个情况也不是异常情况,因为我们大多数数据都需要设置过期时间,而过期时间到时,
这个数据就会从Redis中移除,再有请求查询这个数据,就一定会从数据库中再次同步
注:缓存击穿本身并不是灾难性的问题,也不是不允许发生的现象
五、缓存雪崩
什么是雪崩:
上面讲到击穿现象,同一时间发生少量击穿是正常的,但同一时间发生大量的击穿就会造成缓存雪崩。
(所谓缓存雪崩,指的就是Redis中保存的数据,短时间内有大量数据同时到期的情况)
要想避免这种情况,就需要避免大量缓存同时失效
大量缓存同时失效的原因:通常是同时加载的数据设置了相同的有效期导致的
解决方案:我们可以通过在设置有效期时添加一个随机数,这样就能够防止大量数据同时失效了