Redis做缓存需要防范的问题

为什么使用缓存?

1.业务场景:读多写少,存储系统无力应对
2.查询的结果要经过复杂的运算得到
比如说我上家公司的冲突项验证要多张表进行join的数据作为判断依据,且冲突 项改变概率极低。做缓存降低了数据库压力。

缓存的基本原理

将数据放入内存中,一次生成,多次使用。

缓存穿透问题

1.缓存刚好失效(生成缓存的时间越耗时,出现的几率就越大),这时候大量数据进入,可能拖垮数据库(极端)。加把锁防止极端情况。
2.这数据在数据库中也没有,纯属搞事情。使用布隆过滤器或者给其空值缓存一个较短的时间(来应对相同的请求),加把锁防止极端情况。

一般来说在电商项目会对品类下的数据做一些缓存,但也不会全做。一般会对前几页做缓存,其它页读取时再做缓存,这足以应对大部分的情况。
特殊情况:爬虫来爬你的数据,一页一页爬到底,从数据库中生成缓存比较耗费性能(order by,limit),会拖慢数据库。这要识别哪些请求是爬虫(一般爬虫不会太过分:频繁,高并发),除非想吃官司。一般可以不用理会。

缓存雪崩

在高并发的场景下,缓存失效,导致大量数据访问数据库,导致数据库性能急剧下降或崩溃

解决方案:
一.加锁,只允许一个线程去查询数据并更新缓存,其它请求返回默认值或等待缓存更新后查询缓存
二.将缓存设置成永久,异步去更新
1.通过定时任务去更新
2.通过消息队列去更新
3.使用Canal

缓存热点

有一些热点数据需要提前去缓存(预热),热点要靠你去猜。猜对万事大吉,猜错加锁。也需要顾虑下缓存服务器,看是否需要将热点压力分散到不同的缓存服务器上(负载均衡)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值