首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 基本架构:一个键值数据库包含什么?
02 | 数据结构:快速的Redis有哪些慢操作?
03 | 高性能IO模型:为什么单线程Redis能那么快?
04 | AOF日志:宕机了,Redis如何避免数据丢失?
05 | 内存快照:宕机后,Redis如何实现快速恢复?
06 | 数据同步:主从库如何实现数据一致?
07 | 哨兵机制:主库挂了,如何不间断服务?
08 | 哨兵集群:哨兵挂了,主从库还能切换吗?
09 | 切片集群:数据增多了,是该加内存还是加实例?
10 | 第1~9讲课后思考题答案及常见问题答疑
11 | “万金油”的String,为什么不好用了?
12 | 有一亿个keys要统计,应该用哪种集合?
13 | GEO是什么?还可以定义新的数据类型吗?
14 | 如何在Redis中保存时间序列数据?
15 | 消息队列的考验:Redis有哪些解决方案?
16 | 异步机制:如何避免单线程模型的阻塞?
17 | 为什么CPU结构也会影响Redis的性能?
18 | 波动的响应延迟:如何应对变慢的Redis?
20 | 删除数据后,为什么内存占用率还是很高?
21 | 缓冲区:一个可能引发“惨案”的地方
22 | 第11~21讲课后思考题答案及常见问题答疑
23 | 旁路缓存:Redis是如何工作的?
24 | 替换策略:缓存满了怎么办?
25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?
26 | 缓存异常(下):如何解决缓存雪崩、击穿、穿透难题?
27 | 缓存被污染了,该怎么办?
28 | Pika:如何基于SSD实现大容量Redis?
29 | 无锁的原子操作:Redis如何应对并发访问?
30 | 如何使用Redis实现分布式锁?
31 | 事务机制:Redis能实现ACID属性吗?
32 | Redis主从同步与故障切换,有哪些坑?
33 | 脑裂:一次奇怪的数据丢失
34 | 第23~33讲课后思考题答案及常见问题答疑
35 | Codis VS Redis Cluster:我该选择哪一个集群方案?
36 | Redis支撑秒杀场景的关键技术和实践都有哪些?
37 | 数据分布优化:如何应对数据倾斜?
38 | 通信开销:限制Redis Cluster规模的关键因素
39 | Redis 6.0的新特性:多线程、客户端缓存与安全
40 | Redis的下一步:基于NVM内存的实践
当前位置:
首页>>
技术小册>>
Redis核心技术与实战
小册名称:Redis核心技术与实战
### 23 | 旁路缓存:Redis是如何工作的? 在探讨Redis作为旁路缓存(Sideway Caching)的应用及其工作机制之前,我们首先需要理解旁路缓存的基本概念、它为何重要,以及Redis为何能成为这一领域的佼佼者。旁路缓存,顾名思义,是指将数据存储在主数据存储系统(如数据库)之外的一个快速访问层中,通常用于减少访问主存储系统的次数,从而提高数据访问速度。Redis,凭借其高性能、丰富的数据结构支持以及灵活的配置选项,成为了实现旁路缓存的理想选择。 #### 一、旁路缓存的基本概念与重要性 ##### 1.1 旁路缓存的定义 旁路缓存,又称为二级缓存或外部缓存,是一种位于主数据存储(如关系数据库)与应用服务器之间的缓存机制。它通过缓存经常访问的数据来减少对主存储的直接访问,从而加快数据访问速度,降低系统负载,提升用户体验。 ##### 1.2 旁路缓存的重要性 - **提升性能**:减少数据库等主存储的访问次数,显著降低延迟。 - **减轻数据库压力**:高频次、重复性的查询请求由缓存层处理,减少对数据库的直接冲击。 - **提高系统可扩展性**:通过增加缓存层,可以更容易地水平扩展应用,而不必直接升级数据库硬件。 - **降低运营成本**:减少数据库查询次数意味着更低的资源消耗和更少的运维成本。 #### 二、Redis作为旁路缓存的优势 ##### 2.1 高性能 Redis以其极高的读写速度著称,单实例每秒可处理数万到数十万次的读写请求,这得益于其内存存储和高效的内部数据结构。这使得Redis能够迅速响应来自应用服务器的数据请求,几乎无延迟地提供数据。 ##### 2.2 丰富的数据类型 Redis不仅支持简单的键值对存储,还提供了列表(List)、集合(Set)、有序集合(Sorted Set)、哈希表(Hash)等多种复杂数据结构。这些数据结构使得Redis能够灵活地满足各种缓存需求,如排行榜、会话存储、用户偏好记录等。 ##### 2.3 持久化与数据恢复 虽然Redis主要作为内存数据库使用,但它也提供了RDB(快照)和AOF(追加文件)两种持久化机制,确保在发生系统故障时能够恢复数据。这对于旁路缓存场景尤为重要,因为缓存中的数据丢失可能会影响用户体验。 ##### 2.4 集群与分布式部署 Redis支持主从复制和哨兵(Sentinel)系统,以及更高级的Redis Cluster集群模式,这些特性使得Redis可以轻松实现水平扩展,构建高可用、高并发的缓存集群。 #### 三、Redis旁路缓存的工作机制 ##### 3.1 缓存读写流程 在旁路缓存架构中,Redis位于应用服务器和数据库之间。当应用服务器需要读取数据时,它会首先尝试从Redis缓存中获取。如果缓存中存在所需数据(命中),则直接返回给应用服务器,无需访问数据库;如果缓存中不存在(未命中),则向数据库发起请求,获取数据后存入Redis缓存,并返回给应用服务器。对于写操作,数据通常先更新到数据库,然后同步到Redis缓存(或根据业务需求决定是否同步到缓存)。 ##### 3.2 缓存更新策略 - **LRU(最近最少使用)淘汰策略**:Redis默认使用LRU算法来淘汰缓存中的旧数据,以释放内存空间给新数据。这有助于保持缓存中的数据是最新的、最常被访问的。 - **TTL(生存时间)**:为缓存数据设置过期时间,到期自动删除,避免无效数据占用内存。 - **主动失效与懒加载**:根据业务需求,可以选择在数据更新时立即失效缓存(主动失效),或者在查询时发现缓存已过期时再去数据库加载新数据(懒加载)。 ##### 3.3 缓存一致性问题 在旁路缓存架构中,缓存与数据库之间的数据一致性是一个需要特别注意的问题。常见的解决策略包括: - **读时失效**:查询缓存时,如果发现数据已过期,则先删除缓存中的旧数据,再从数据库加载新数据。 - **写时更新**:数据更新时,同步更新数据库和缓存中的数据,保持两者一致。但需注意,写操作应尽可能减少对缓存的依赖,以避免缓存雪崩等问题。 - **延时双删**:在数据更新后,先删除缓存中的旧数据,然后等待一段时间(如几秒)后再次删除缓存,以确保缓存中的数据在更新期间不会被误用。 #### 四、Redis旁路缓存的实践案例 ##### 4.1 电商网站商品信息缓存 在电商网站中,商品信息是用户最常访问的数据之一。使用Redis作为旁路缓存,可以存储商品的名称、价格、库存等基本信息。当用户浏览商品详情时,应用服务器首先从Redis中获取数据,如果缓存未命中,则向数据库发起请求,并将查询结果存入Redis缓存中。这样,即使是面对高并发的访问,也能保证快速响应和较低的系统负载。 ##### 4.2 社交应用用户数据缓存 在社交应用中,用户的个人信息、好友列表、动态等数据频繁被访问。使用Redis缓存这些数据,可以显著提升用户体验。例如,当用户查看自己或他人的资料时,系统首先从Redis中获取数据;如果数据不存在或已过期,则向数据库发起请求,并更新Redis缓存。此外,Redis的哈希表结构非常适合存储用户的复杂信息,如个人资料、偏好设置等。 #### 五、总结 Redis作为旁路缓存,以其高性能、丰富的数据类型、灵活的持久化机制以及强大的集群能力,在提升系统性能、减轻数据库压力、提高可扩展性等方面发挥着重要作用。在实际应用中,我们需要根据业务需求合理设计缓存策略,确保缓存与数据库之间的数据一致性,并充分利用Redis的各种特性来优化缓存性能。通过合理的缓存设计和实施,我们可以让Redis成为提升系统整体性能的关键力量。
上一篇:
22 | 第11~21讲课后思考题答案及常见问题答疑
下一篇:
24 | 替换策略:缓存满了怎么办?
该分类下的相关小册推荐:
Redis面试指南
Redis的Lua脚本编程
Redis零基础到实战