Redis 从原理到最佳实践

29 篇文章 0 订阅
28 篇文章 0 订阅

大家好,我是伍六七。一个专注于输出 AI+ 编程内容的在职大厂资深程序员,全国最大 AI 付费社群破局初创合伙人,关注我一起破除 35 诅咒。

Redis 基本上是大部分技术公司都会使用的缓存框架,但是我发现很多程序员其实并不懂 Redis。

今天,阿七带大家从理论和实践的角度来了解和使用 Redis。

1 缓存基本思想

1、不同的存储介质访问延迟不一样,相同成本存储容量不一样

SSD/Disk、Memory、L3 cache、L2 cache、L1 cache 五种存储介质,访问延迟逐渐降低,但是同等成本的容量却逐渐增大。

2、时间局限性原理

被获取过一次的数据在未来会被多次获取。

3、以空间换时间

开辟一块高速独立空间,提供高速访问。

4、性能成本权衡

访问延迟性低、性能越高,等容量成本越高。

2 缓存优势

  1. 提升访问性能
  2. 降低网络拥堵
  3. 减轻服务负载
  4. 增强可扩展性

3 缓存代价

  1. 系统复杂性提高
  2. 存储和部署成本变高
  3. 数据一致性问题

4 缓存的三种模式

4.1 Cache Aside 旁路缓存

核心思想

写操作:更新 DB 之后,直接将 key 从缓存中删除;

读操作:先读缓存,如果没有,则读 DB,同时将 DB 的数据同步到缓存中。

特点

业务端处理所有数据访问细节,同时利用 lazy 懒加载思想,更新 DB 之后,直接删除缓存并通过 DB 更新,确保数据以 DB 为准,可以大幅降低缓存和 DB 之间的不一致的概率。

缺点

1、如果删除缓存失败,可能会有问题;

解决方法

失败增加监控

2、如果同时有比较高的QPS访问刚插入或者更新的数据,可能会打垮DB;

解决方法

使用多线程异步执行查询,防止这种问题。

场景:读多写少。比如用户数据,用户修改用户信息很少,但是各种业务场景用到用户数据的读场景比较多。

4.2 Read/Write Through

核心思想

读写缓存和 DB 的操作,都有一个中间的数据服务代理。

写操作:先查缓存,如果缓存不存在,则只更新 DB;如果缓存中存在,则先更新缓存,再更新 DB,然后返回;

读操作:先查缓存,如果命中则直接返回。否则从 DB 中加载,然后回种到缓存中再返回。

特点:业务端不需要关心数据细节,系统隔离性好

4.3 write-Back 或者 Write-Behind

核心思想

承接 Write Through,写操作更新完缓存之后,异步回写数据到 DB 或者批量回写数据到 DB。

缺点

异步或者批量回写,可能会导致数据丢失。

特点

合并或者异步写 DB,DB 压力小。

使用场景:写频率很高,但是对于数据一致性要求不太高的业务

5 Redis 常见面试题

5.1 Redis 雪崩

概念

大量的应用请求无法在 Redis 缓存中进行处理,紧接着,
应用将大量请求发送到数据库层,导致数据库层的压力激增。

原因

1、缓存中有大量数据同时过期,导致大量请求无法得到处理

2、Redis 缓存实例发生故障宕机了

解决方案

针对原因 1

  • 方法1:避免给大量的数据设置相同的过期时间。
  • 方法2: 降级直接返回预定义信息、空值或是错误信息。

针对原因 2

  • 方法1: 在业务系统中实现服务熔断或请求限流机制。
  • 方法2: 服务端 限流。

事前预防:使用主从节点 构建 Redis 缓存高可靠集群

5.2 击穿

概念:1、是发生在某个热点数据失效的场景下,大量请求直接访问 DB,DB 压力骤增,业务响应延迟。

原因:热点 key 过期失效或者同时失效。

解决办法:热点 key 不设置过期时间;或者设置过期时间为基础时间+随机时间。

5.3 穿透

概念:要访问的数据既不在 Redis 缓存中,也不在数据库中,导致请求在访问缓存时,发生缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据。

原因:1、业务层误删除数据了;2、恶意攻击:专门访问数据库中没有的数据。

解决方法

  • 1、缺省值或者空值。
  • 2、使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力。
  • 3、前端进行请求检测

5.4 bigKey

概念:一个缓存 key,存储数据过多。比如一个上万记录的 List;

危害

1、造成内存分配不均匀。比如在 Redis cluster 或者 Codis 中,会造成节点的内存使用不均匀;

2、超时阻塞。因为 Redis 单线程特性,如果操作某个 bigKey 耗时比较久,则后面的请求会被阻塞。

3、网络阻塞,消耗带宽。

4、过期删除,会很慢,会阻塞 Redis。如果 Bigkey 设置了过期时间,当过期后,这个 key 会被删除,假如没有使用 Redis 4.0 的过期异步删除,
就会存在阻塞 Redis 的可能性,并且慢查询中查不到(因为这个删除是内部循环事件)。

如何发现?

Redis 命令: redis-cli --bigkeys

解决方法

  • 删除 bigKey。
  1. Redis4.0 之后,异步删除;
  2. 集合类型:用 scan,读取部分数据删除;
  3. Hash类型,用 Hscan,读取部分数据删除
  • 拆分
  1. String类型,拆分成多个 key
  2. 集合或者 Hash 类型,拆分成多个 List 或者 Hash

5.5 热 key

概念

所谓热 key 问题就是,突然有几十万的请求去访问 Redis 上的某个特定key。

那么,这样会造成流量过于集中,达到物理网卡上限,从而导致这台 Redis 的服务器宕机。

解决

1、二级缓存——本地缓存。比如利用 ehCache,或者一个- HashMap 都可以。在你发现热 key 以后,把热 key 加载到系统的 JVM 中。
针对这种热 key 请求,会直接从 jvm 中取,而不会走到 Redis 层。

2、备份热key。不要让key走到同一台redis上不就行了。我们把这个key,在多个redis上都存一份不就好了。
接下来,有热key请求进来的时候,我们就在有备份的redis上随机选取一台,进行访问取值,返回数据。

< END >

链接我,免费领取Java面试全套pdf(带答案)

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《Redis核心原理实践PDF》是一本介绍Redis的核心原理实践的电子书,该书以清晰易懂的方式详细阐述了Redis的运作原理和实际应用。 首先,该书从Redis的基本概念入手,介绍了Redis的主要特性和优势。接着,它详细讲解了Redis的数据结构,包括字符串、哈希、列表、集合和有序集合等,以及如何进行数据的存取、更新和查询等操作。同时,书中还涉及了Redis的内存管理和持久化机制,让读者了解到如何通过合理的配置来提高Redis的性能和稳定性。 此外,该书还介绍了Redis的高级功能与实践,让读者能够更好地利用Redis解决实际问题。例如,它提供了关于分布式锁、消息队列、缓存、计数器和推荐系统等方面的实践案例和最佳实践。通过这些案例,读者可以了解到如何在实际项目中灵活应用Redis,提高系统的性能和吞吐量。 总之,《Redis核心原理实践PDF》是一本对于Redis的深入介绍和实践指南。无论是对于Redis的初学者还是有一定经验的开发者来说,该书都具有很高的价值。通过学习该书,读者可以全面了解Redis的核心原理和基本操作,并且能够通过实际示例掌握如何高效地使用Redis解决实际问题。 ### 回答2: Redis核心原理实践是一本介绍Redis数据库的书籍。Redis是一种基于内存的数据存储以及高性能的Key-Value数据库,广泛应用于缓存、队列、计数器等场景。 该书首先介绍了Redis的发展历史和应用场景,然后详细解释了Redis的核心原理和运行机制。Redis采用单线程的方式处理客户端请求,但通过异步的方式处理IO操作,以此来保证高并发和高性能。同时,Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合,并通过各种命令操作这些数据结构。 除了核心原理,该书还介绍了Redis实践中的一些技巧和最佳实践。例如,如何合理设置过期时间、如何选取合适的数据结构、如何通过持久化机制保证数据的可靠性等等。同时,该书还介绍了Redis的集群化部署和高可用架构等相关内容。 此外,该书还介绍了一些与Redis相关的工具和技术,例如Sentinel、Cluster、Lua脚本编程等。这些工具和技术可以帮助我们更好地利用Redis来构建可靠性高、性能优越的分布式系统。 总之,《Redis核心原理实践》这本书通过深入浅出的方式,系统地介绍了Redis的核心原理实践经验,对于理解和应用Redis数据库具有很大帮助。无论是对Redis感兴趣的初学者,还是有一定经验的开发人员,都能够从这本书中获得自己所需要的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七AI编程

你猜你给我1分我要不要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值