跳过正文
  1. 技术文档/
  2. Redis/
  3. 高级/

应用场景

限流

计数器算法 # 滑动窗口算法 # 漏桶算法 # 令牌桶算法 #

缓存

使用了缓存,就意味着不需要强一致性 缓存是持久化数据的冗余存储 常见的缓存模式: 1. **缓存即写 (Write-Through Cache)** • **定义**:每当有数据写入时,数据同时写入缓存和后端存储。 • **优点**:确保缓存和后端存储数据的一致性。 • **缺点**:写操作的性能较差,因为每次写入都需要更新两个地方。 2. **缓存写入 (Write-Back Cache)** • **定义**:数据首先写入缓存,定期或在特定条件下将数据批量写入后端存储。 • **优点**:写操作性能较高,减少了写入后端存储的频率。 • **缺点**:可能会导致数据丢失,因为缓存中的数据在写入后端存储前可能会丢失。 3. **缓存旁路 (Write-Around Cache)** • **定义**:写操作直接写入后端存储,不经过缓存。 • **优点**:避免了缓存的写入负担,适合写操作较多的场景。 • **缺点**:第一次读取数据时,缓存命中率较低,可能导致较高的延迟。 4. **读取缓存 (Read-Through Cache)** • **定义**:读取数据时,首先检查缓存,如果缓存中没有数据,再从后端存储读取并缓存。 • **优点**:提高了读取操作的性能,减少了后端存储的负载。 • **缺点**:需要额外的缓存空间来存储读取的数据。 5. **预热缓存 (Cache Preloading)** • **定义**:在应用启动或特定时间点,预先将常用的数据加载到缓存中。 • **优点**:提高了应用启动后的初始性能,减少了第一次访问时的延迟。 • **缺点**:需要额外的时间和资源来预加载数据。 6. **缓存失效 (Cache Invalidation)** • **定义**:在数据更新或删除时,手动或自动地使缓存中的相应数据失效。 • **优点**:确保缓存中的数据与后端存储数据的一致性。 • **缺点**:需要额外的逻辑来管理缓存失效。 7. **分布式缓存 (Distributed Cache)** • **定义**:将缓存数据分布到多个节点上,形成一个统一的缓存系统。 • **优点**:提高了缓存系统的扩展性和可用性,适合大规模应用场景。 • **缺点**:需要额外的网络通信和一致性管理。 8. **本地缓存 (Local Cache)** • **定义**:缓存数据存储在本地节点中,不共享给其他节点。 • **优点**:读取和写入操作性能高,适合单节点或小规模应用。 • **缺点**:无法在多节点间共享数据,扩展性较差。

秒杀

某活动瞬时产生巨大的并发访问量 需要解决的问题 # 大量的并发请求,服务器要能扛得住 不能超卖 避免少卖 保证触达用户而非黄牛 如何高并发 # 将库存存储在 redis 中,通过 redis 扣减库存,这样高并发的请求打在 redis 上,并通过消息队列异步写库

消息队列

Lpush + Rpop / Rpush + Lpop 避免轮询等,使用 Brpop,Blpop 阻塞式获取 发布订阅 ** Stream 实现高级消息队列**

分布式锁

特性 # 互斥性: 锁的目的是获取资源的使用权,因此只能一个竞争者持有锁 安全性: 一个竞争者持有锁期间,若因为意外情况未能及时释放锁,也有兜底策略释放锁,保证其他的竞争者可以获得锁 对称性: 同一个锁的枷锁和解锁必须是同一个竞争者, 不能把其他竞争者的锁给释放掉了 可靠性: 需要一定的异常处理能力,容灾能力 实现 # set key value NX PX expire // key 为锁标识 // value 为持锁者标识,只能持有者操作锁,非持有者不可操作,保证了**对称性** // NX 存在则不操作,即只有第一个人操作成功,后来者操作会失败,保证了**互斥性** // expire 设置过期时间,即使意外情况没有释放锁,也会因过期自动释放锁,保证了**安全性** 若业务逻辑执行时间超过锁的过期时间,可以考虑锁续期