缓存、分布式缓存和持久化

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 这篇内容介绍了缓存的概念和Redis的作用,以口袋与公文包的比喻解释了缓存如何提高数据访问速度。Redis是一个内存中的高级缓存系统,能提升系统响应速度。接着讨论了为何需要分布式缓存,通过多个“篮子”(Redis节点)解决单点故障和性能瓶颈,保证高可用性和数据安全性。最后提到了Redis的两种持久化机制——RDB(定期数据快照)和AOF(记录写操作日志),分别用照片备份和实时同步来比喻,说明它们在数据丢失风险和恢复速度上的权衡。

引子:

缓存是什么?

举个栗子:

假如我们在访问网站时,我们总是期待网页能够快速加载,视频能够0延迟播放。但是,网络传输数据是需要一定的时间,为了节省这个时间,让我们访问时的速度更快,这时候,缓存应运而生。

其实,缓存就好像是我们生活中的口袋与公文包的关系一样,我们会把一些需要快速取出的物品放在口袋,而不常用的则会选择放在公文包中,这样就能节省了我们需要的东西的获取时间,不用再费时间去翻找公文包啦。

那么现在,Redis就是这样一个高级的缓存系统,它把数据存储在内存里,这样访问速度非常快。不仅如此,Redis还会巧妙地利用各种方法来组织和管理这些数据,确保内存得到最大的利用,让系统响应速度更快。就好比是把书籍按照分类、编号等方法整齐地放在书架上,你要找一本书时,可以迅速找到它,而不用翻遍整个房间。

为什么需要分布式缓存?

针对单机Redis的问题,使用Redis集群可以解决单点故障和性能瓶颈问题。Redis集群提供了分片和哨兵集群的自动故障转移功能,确保高可用性和性能。数据分片允许将数据分布在多个Redis节点上,提高了内存容量和吞吐量。

想象一下你手里只有一个篮子,你要往里装很多东西。但是篮子的容量是有限的,装满了就装不下了。而且,如果篮子出了问题,比如篮子破了,那所有东西都会掉出来。

但是,如果你有很多个篮子,你可以把东西分散装在这些篮子里,不会有一个篮子装不下的问题。而且,如果有一个篮子出了问题,其他篮子还可以继续用,不会让你丢失所有的东西。

Redis集群就像是这么一堆篮子,把数据分散存放在多个篮子里。这样一来,就避免了单个篮子容量不够的问题,还可以防止因为一个篮子出了问题而导致所有数据丢失。同时,它还能够自动把数据在各个篮子之间调整,确保每个篮子都装得均匀,不会出现某个篮子装得太多,而其他篮子都空着的情况。

所以,用Redis集群就像是有了很多个篮子一样,解决了单个篮子容量小和篮子出问题的困扰,让我们的数据更安全、更可靠。

总的来说,基于Redis集群可以有效解决单机Redis存在的问题,提高了系统的可用性、可扩展性和性总的来说,基于Redis集群可以有效解决单机Redis存在的问题,提高了系统的可用性、可扩展性和性

Redis持久化

我们用图片举例子:

Redis持久化就像是把你手机里的重要照片备份到云盘一样。为什么要备份呢?因为万一手机丢了、坏了或者数据丢失了,你还能在云盘上找回你的照片。

1. RDB持久化:

技术八股层面:

  • RDB全称为Redis Database Backup file,也叫做Redis数据快照。它的工作原理是在指定的时间间隔内生成一份数据的快照,并将其保存到磁盘上的文件中。
  • RDB持久化可以通过手动执行save命令或者自动执行bgsave命令来触发

通俗点就是:

RDB持久化就像是你定期把手机里的照片复制一份放到云盘里,你可以选择定期备份,比如每天晚上备份一次

2. AOF持久化:

技术八股层面:

  • AOF全称为Append Only File,即只追加文件。它的工作原理是将每次写操作都记录到一个日志文件中,当Redis服务器重启时,根据日志文件中的命令顺序重新执行命令,从而重建数据。
  • AOF持久化可以通过配置Redis服务器的appendonly参数来启用。

通俗点就是:

AOF持久化则是把你手机里每一张新照片都拍摄一份放到云盘,确保每一张照片都被记录下来。这样即使手机出了问题,你也能找回最新的照片。

3. 小结

RDB 方式的 bgsave 的基本流程分为:

fork主进程得到一个子进程,共享内存空间 --> 子进程读取内存数据并写入新的RDB文件 --> 用新RDB文件替换旧的RDB文件

由此可以看出,RDB缺点是:

RDB执行间隔时间长,两次RDB之间写入数据有丢失的风险

fork子进程、压缩、写出RDB文件都比较耗时

-------------------------------------------------------------------------------------------------------------------

AOF

因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

因为它生成的日志文件可能比较大,是需要刷盘的,所以缺点也很明显,重启时恢复数据的速度可能比RDB持久化慢

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
89 8
|
3天前
|
存储 缓存 数据处理
Pandas高级数据处理:缓存与持久化
本文介绍 Pandas 中的缓存与持久化技术,涵盖其意义、常见方式及问题解决方案。缓存可提高效率、减少重复计算;持久化则优化资源使用。文中探讨内存缓存、文件系统和数据库持久化,并提供代码示例,如 LRU 缓存、Parquet 格式保存及 SQLite 数据库交互,帮助读者理解和应用这些技术。
111 73
|
15天前
|
存储 缓存 安全
分布式系统架构7:本地缓存
这是小卷关于分布式系统架构学习的第10篇文章,主要介绍本地缓存的基础理论。文章分析了引入缓存的利弊,解释了缓存对CPU和I/O压力的缓解作用,并讨论了缓存的吞吐量、命中率、淘汰策略等属性。同时,对比了几种常见的本地缓存工具(如ConcurrentHashMap、Ehcache、Guava Cache和Caffeine),详细介绍了它们的访问控制、淘汰策略及扩展功能。
39 6
|
6月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
3月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
61 5
|
3月前
|
缓存 监控 安全
检测 Webpack 5 持久化缓存是否存在安全漏洞
【10月更文挑战第23天】通过全面、系统地检测和评估,能够及时发现 Webpack 5 持久化缓存的安全漏洞,并采取有效的措施进行修复,保障项目的安全稳定运行。同时,要持续关注安全技术的发展和变化,不断提升安全检测能力,以应对日益复杂的安全挑战。
|
3月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
3月前
|
存储 缓存 监控
配置 Webpack 5 持久化缓存时需要注意哪些安全问题?
【10月更文挑战第23天】通过全面、系统地分析和应对安全问题,能够更好地保障 Webpack 5 持久化缓存的安全,为项目的成功构建和运行提供坚实的安全基础。同时,要保持对安全技术的关注和学习,不断提升安全防范能力,以应对日益复杂的安全挑战。
|
3月前
|
存储 缓存 前端开发
利用 Webpack 5 的持久化缓存来提高构建效率
【10月更文挑战第23天】利用 Webpack 5 的持久化缓存是提高构建效率的有效手段。通过合理的配置和管理,我们可以充分发挥缓存的优势,为项目的构建和开发带来更大的便利和效率提升。你可以根据项目的实际情况,结合以上步骤和方法,进一步优化和完善利用持久化缓存的策略,以达到最佳的构建效果。同时,不断探索和实践新的方法和技术,以适应不断变化的前端开发环境和需求。
|
5月前
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
205 14
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性