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

本文涉及的产品
云原生内存数据库 Tair,内存型 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
相关文章
|
1月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
7天前
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
|
8天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
1月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
2月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
1月前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
110 10
|
20天前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
38 0
|
2月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
2月前
|
存储 缓存 数据库
分布式篇问题之全量缓存解决数据库和缓存的一致性问题如何解决
分布式篇问题之全量缓存解决数据库和缓存的一致性问题如何解决