Redis

1、缓存击穿

大量的请求获取某个 key 对应的值,而这个 key 在某个时间突然失效了,意味着大量的请求就无法在缓存中获取数据了,而是去请求数据库了,这样很有可能导致数据库被击垮。

解决:

不要设置过期时间了,如果该key的数据更新了,那么就通过互斥锁的方式将其更新

如果不使用互斥锁的方式很容易导致数据不一致的情况,这里为了保证缓存和数据库的一致性,就只能牺牲一点点的效率了。

2、缓存穿透

某个不存在的key一直被访问,结果发现数据库中也没有这样的数据,最终导致访问该key的所有请求都直接请求到数据库。

解决:

1)缓存空数值:不存在,则存个null,但需要设置过期时间,不然会导致查不到正确的值。

2)布隆过滤器:判断数据存在的概率,数组+hash函数

可能存在,再去查数据库

一定不存在,没必要查数据库

3、缓存雪崩

在某个时间节点,大量的 key 失效,导致大量的请求从缓存中获取不到数据而去请求数据库。

解决:

1)过期时间加随机值

2)加锁

在多个请求同时到达业务系统时候,只能有一个线程能获取到锁,然后才能继续去缓存或者是数据库中查询数据,然后后面的流程和之前的是一样的,执行完成后释放锁,然后其他线程再争抢锁,然后重复前面的流程。

优点:可以很好的保护数据库不会被打挂,缺点:并发度极低。

4、缓存预热

将一些可能经常使用数据在系统启动的时候预先设置到缓存中,这样可以避免在使用到的时候先去数据库中查询。

添加一个缓存刷新页,这样通过人工干预的方式将一些可能为热点的key添加到缓存中。

5、缓存降级

系统可以根据一些关键数据进行自动降级,降级的最终目的是保证核心服务可用,即使是有损的。但是有的一些业务的核心服务是不能降级的。这是一种丢卒保帅的思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值