缓存

缓存穿透

image-20250315144632863

image-20250315144601114

布隆过滤器

image-20250315144708050

存在误判,实际应用中可以设置误判率,通常小于5%。

缓存击穿

image-20250315145212295

image-20250315145632811

互斥锁: 具有强一致性,但是性能查。

逻辑过期: 高可用,性能优,但不能保证数据绝对一致。

缓存雪崩

image-20250315145937767

双写一致性

image-20250315151104620

  1. 都会有脏数据的风险

  2. 先删再改会有脏数据,那就再删一次

  3. 保证数据库主从复制完成,避免数据库崩溃被从库恢复后又和缓存不一致,但是延时多久也是个问题

强一致性业务: 使用redis读写锁,但是性能低。

非强一致性业务: 异步通知保证数据的最终一致性,使用MQ。

持久化

RDB

image-20250315153753522

image-20250315154413490

AOF

image-20250315160328612

image-20250315160453518

image-20250315160626055

RDB与AOF对比

image-20250315160829609

数据过期策略

惰性删除 + 定期删除

惰性删除

image-20250315161117816

定期删除

image-20250315161318800

数据淘汰策略

image-20250315161912993

image-20250315162133640

分布式锁

image-20250315162612361

Redisson

setnx + lua脚本(保证原子性)

image-20250315163340173

image-20250315163543384

image-20250315163926311

image-20250315164224634

但是红锁太耗资源不推荐,可用zookeeper。

集群

主从复制

保证Redis的高并发

image-20250315172846449

全量同步

image-20250315173413855

增量同步

image-20250315173819921

哨兵模式

保证Redis的高可用

image-20250315174621198

选主机制

image-20250315174834006

脑裂问题

image-20250315175446698

image-20250315175109956

分片集群

解决海量数据存储问题和高并发写问题

image-20250315175924969

数据读写

image-20250315180140790

Redis是单线程,但为什么那么快?

IO模型

image-20250315190042046

阻塞IO

image-20250315190219095

非阻塞IO

image-20250315190421343

IO多路复用

image-20250315190649211

image-20250315190908236

Redis网络模型

image-20250315191308024