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

本文涉及的产品
云数据库 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
相关文章
|
6天前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
6天前
|
缓存 算法 NoSQL
【分布式详解】一致性算法、全局唯一ID、分布式锁、分布式事务、 分布式缓存、分布式任务、分布式会话
分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同,称之为副本一致性(consistency)。副本一致性是针对分布式系统而言的,不是针对某一个副本而言。强一致性(strong consistency):任何时刻任何用户或节点都可以读到最近一次成功更新的副本数据。强一致性是程度最高的一致性要求,也是实践中最难以实现的一致性。单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,这个用户不会再读到比这个值更旧的值。
431 0
|
6天前
|
缓存 NoSQL 数据库
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
157 0
|
6天前
|
存储 缓存
本地缓存和分布式缓存区别
【2月更文挑战第16天】
139 2
本地缓存和分布式缓存区别
|
6天前
|
存储 缓存 算法
说说什么是本地缓存、分布式缓存以及多级缓存,它们各自的优缺点?
说说什么是本地缓存、分布式缓存以及多级缓存,它们各自的优缺点?
|
6天前
|
存储 缓存 NoSQL
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
313 0
|
6天前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
6天前
|
存储 缓存 大数据
本地缓存和分布式缓存
本地缓存和分布式缓存
71 0
|
6天前
|
缓存 NoSQL Java
SpringBoot:第五篇 集成Guava(本地缓存+分布式缓存)
SpringBoot:第五篇 集成Guava(本地缓存+分布式缓存)
88 0
|
6天前
|
缓存 NoSQL 应用服务中间件
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
分布式缓存之Redis(持久化、主从、哨兵、分片集群)