引子:
缓存是什么?
举个栗子:
假如我们在访问网站时,我们总是期待网页能够快速加载,视频能够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持久化慢