Redis基础知识(学习笔记4--高并发问题)

1.搞懂 Redis 缓存穿透、击穿、雪崩!

--https://cloud.tencent.com/developer/article/1775405

缓存雪崩---热点 key 在某一个时刻同时失效(批量插入、批量更新容易导致);

缓存穿透  --Redis 和数据库中都没有我们想要的数据(存储层都穿透了);

缓存击穿--Redis中没有对应的苏剧,数据库中有,大量的请求则直接打到物理DB上。

2. 突发性热点缓存重建导致系统压力暴增。(例如,直播时,123上链接。。。)

大量请求同时请求某一条数据。

(1)同步锁syschronized

一种优化方案就是添加同步锁syschronized,即所谓的双重检测锁(DCL),来解决突发热点并发重建【重建:重复创建】导致DB压力暴增。

让第一个请求先查Redis缓存,若不存在查DB;查到写入Redis缓存。

后续的请求再访问Redis时,直接Redis取值。

synchronized(this){
//redis 缓存中取数据
//redis 缓存中不存在该条数据,请求DB,存到redis中
}

注意:

(1)注意锁对象的粒度,越小越好;否则,性能低下。 

(2)syschronized()是进程级别,那么应用多节点部署的时候,就可能在redis中重建不止一次,但是小概率事件.

(2)SETNX 分布式锁

另外一种方案,就是考虑使用SETNX 分布式锁。

这种方案比较常用。

3 缓存数据库双写不一致

 常用的优化方案--读写锁

所有的读操作并行执行,读和写互斥串行执行。

更多的介绍可以参阅《Redis 应用实践:读写锁进行性能优化》

https://zhuanlan.zhihu.com/p/700056780

4.缓存雪崩

雪崩的优化思路--多级缓存

  • 数据访问速度更快:多级缓存将数据存储在不同的缓存层中,用户可以优先访问较快的缓存层,大大提高了数据的访问速度。

  • 提升系统的稳定性:当一个缓存层出现问题时,其他缓存层可以继续为系统提供服务,提升了系统的容错性和稳定性。

  • 减少数据库压力:多级缓存可以有效地减少数据库的访问频率,降低数据库的负担,提高系统的可扩展性。

  • 提供灵活的缓存策略:多级缓存可以根据业务需求定制不同的缓存策略,如热点数据可以存储在更快速的缓存层,冷数据可以存储在较慢的缓存层。

例如,先去访问程序进程的缓存,如果缓存中有,就不需要去访问Redis,性能比Redis还好。

使用时,要小心(1)内存的管理和控制,防止内存溢出;(2)如果是多节点部署,要考虑节点间数据的一致性(变化更新需要做到联动--解决方案例如借助MQ等)。

5.缓存预热

针对可知的热点或爆品,提前灌入到缓存中。

6.核心链路,故障时,降级预案

可能用不到,但不能没有,预防万一。

posted @ 2024-06-15 23:44  东山絮柳仔  阅读(15)  评论(0编辑  收藏  举报