目录

一、Redis 是什么

二、Redis 的特点和功能

三、Redis 缓存的使用

四、Redis 为什么能这么快

五、Redis 缓存的淘汰策略

六、Redis 持久化

1.为什么需要持久化

2.Redis 的持久化策略的两种方式

3.RDB的特点

4.AOF的特点

5.项目中如何选择这两种方式

七、Redis 高可用部分的主从复制

八、Redis 哨兵的基本原理

九、Redis缓存雪崩、穿透、击穿概念及解决办法


一、Redis 是什么

Redis 是Remote Dictionary Server(Redis) 的缩写,是一个使用 C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库,并提供多种语言的API。它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库,可以用作数据库、缓存、消息中间件等。

二、Redis 的特点和功能

三、Redis 缓存的使用

四、Redis 为什么能这么快

五、Redis 缓存的淘汰策略

六、Redis 持久化

1.为什么需要持久化

比如redis里有10gb数据,突然停电或者意外宕机了,再启动的时候10gb都没了!所以需要持久化,宕机后再通过持久化文件将数据恢复。

2.Redis 的持久化策略的两种方式

  • RDB(默认):快照形式是直接把内存中的数据保存到 dump.rdb 文件中,定时全量保存,保存的是数据。

  • AOF:把所有的对 Redis 的服务器进行修改的命令都保存到 appendonly.aof 文件中,定时向文件中追加,保存的是命令。

3.RDB的特点

RDB性能高,速率快,全量持久化,但数据可靠性低。

(1)rdb文件

RDB(Redis DataBase):基于时间的快照,Redis默认是会以快照"RDB"的形式将数据持久化到磁盘的一个二进制文件 dump.rdb中,其默认只保留当前最新的一次快照,特点是执行速度比较快,缺点是可能会丢失从上次快照到当前时间点之间未做快照的数据。

但是我们可以通过配置文件配置多个时间点的备份,这样就可以保留多个备份,当出现问题时候方便恢复到不同时间节点,很适合备份,并且此文件格式支持不少第三方工具可以进行后续的数据分析。比如:可以在最近24小时内,每小时进行一次备份RDB文件,并且在每个月的每一天,也备份一个RDB文件,这样的话,即便遇上问题,也可以随时将数据集还原到不同的版本,所以RDB 非常适合灾难恢复。

(2)优点

由于rdb文件都是二进制文件,所以很小,在灾难恢复的时候会快些。

他的效率(宕机恢复的效率,而不是持久化的效率)相对于aof要高(bgsave而不是save),因为每来个请求他都不会处理任何事,只是bgsave的时候他会fork()子进程且可能copyonwrite,但copyonwrite只是一个寻址的过程,纳秒级别的。而aof每次都是写盘操作,毫秒级别。没法比。

注:fork()子进程以及copyonwrite(写时复制)的详解可见文末的参考“RDB原理”

(3)缺点

数据可靠性比aof低,也就是会丢失的多。因为aof可以配置每秒都持久化或者每个命令处理完就持久化一次这种高频率的操作,而rdb的话虽然也是靠配置进行bgsave,但是没有aof配置那么灵活,也没aof持久化快,因为rdb每次全量,aof每次只追加。

4.AOF的特点

AOF数据可靠性高,增量持久化,但宕机恢复的效率相比于RDB还是略低。

(1)aof文件

AOF(Append Only File):只追加文件,使用 AOF 做持久化,每一个写命令都通过 write 函数追加到 appendonly.aof 中。而RDB是压缩成二进制等时机开子进程去干这件事。

(2)优点

①持久化的速度快,因为每次都只是追加,rdb每次都全量持久化。

②全程持久化,只需要在配置中开启 appendonly yes。这样 Redis 每执行一个修改数据的命令,都会把它添加到 AOF 文件中,当 Redis 重启时,将会读取 AOF 文件进行重放,恢复到 Redis 关闭前的最后时刻。

③数据相对更可靠,丢失少,使用 AOF 的优点是会让 Redis 变得非常耐久。可以设置不同的 Fsync 策略,AOF的默认策略是每秒钟 Fsync 一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据。

(3)缺点

灾难性恢复的时候过慢,因为aof每次都只追加原命令,导致aof文件过大,但是后面会rewrite,但是相对于rdb也是慢的。

5.项目中如何选择这两种方式

如果你追求性能,同时仍然可以承受数分钟内的数据丢失的话,那么可以使用 RDB 持久化。

如果你非常关心你的数据,并且性能对性能要求不是那么高的话,那么可以使用 AOF 持久化。

注:Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少。

七、Redis 高可用部分的主从复制

八、Redis 哨兵的基本原理

九、Redis缓存雪崩、穿透、击穿概念及解决办法

参考:2W 字图解 Redis,面试必过必杀技!!

JAVA架构 | Redis分布式缓存原理分析

十三、Redis持久化之RDB原理_会飞的IT蜗牛的博客-CSDN博客_rdb

Redis详解-更新中相关推荐

  1. Android空间架构与自定义控件详解-更新中

    概述: 控件是每个Adnroid APP都必不可少的一部分,无论是使用系统控件还是使用自定义控件.这些控件组成了精美的界面. 本章将讲解Android控件架构,以及如何实现自定义控件. 本章你讲了解到 ...

  2. 33.Redis详解

    一 缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级.二级缓存是保存了CPU最近经常访问的数据,内存是保存C ...

  3. Redis详解及使用

    Redis详解及使用 前言:对于缓存这个概念大家应该都清除,在项目开发中,为了避免用户频繁请求数据库,比如类似于淘宝这样的大量请求下,导致服务器的数据库访问压力过大导致崩溃,因此我们通过设置缓存来解决 ...

  4. 数据库应用——Redis详解

                                                                                         Redis详解 一.非关系型数 ...

  5. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  6. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

  7. java lock unlock_详解Java中的ReentrantLock锁

    ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下.能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原 ...

  8. 前端中全部盒子靠左对齐_图文详解ul中li内容垂直居中和水平居中的方法

    在页面布局时,经常会用到li标签,它可用于列表,导航,选项卡等等,那你知道如何让ul中的li居中吗?这篇文章就和大家讲讲如何让ul中的li水平居中以及如何让li内容垂直居中.感兴趣的朋友继续往下看吧. ...

  9. mysql 事物的持久性是指_详解MySQL中事务的持久性实现原理

    前言 说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什 ...

最新文章

  1. html盒子高度自动收缩,CSS如何解决背景图随父盒子高度变化而拉伸或收缩的问题...
  2. 王爽《汇编语言第三版》实验10-1代码实现
  3. 多表查询中的一些概念
  4. 使用 Log4Net 记录日志
  5. Mybatis多对多,复杂增删改查(特殊需求循环插入,分组查询)
  6. Apollo自动驾驶入门课程第①讲—无人驾驶概览
  7. jsp mysql登录 demo_java jsp+servlet+mysql实现登录网页设计
  8. 【java】java jps 命令
  9. CloudFlare CDNJS 漏洞差点造成大规模的供应链攻击
  10. 【easy!】LeetCode 14. Longest Common Prefix
  11. Windows10视频文件服务器启动失败,Win10安全中心服务启动失败的解决方法
  12. js生成二维码,js 解析二维码,jsqrcode,js从url生成二维码
  13. python使用masscan扫描端口
  14. 加快二代支付系统建设
  15. 96114198交易失败_通过工行网银向境外汇款提示“96111444,系统错误”,如何处理?...
  16. Aria2+Rclone教程
  17. 用SpringBoot 做代web理服务器
  18. java 解决oracle US7ASCII编码,sql查询时
  19. EnlightenGAN: Deep Light Enhancement without Paired Supervision
  20. C语言:输入一个不多于5位的正整数,要求1:求出它是几位数; 要求2:分别打印出每一位数; 要求3:按逆序打印出各位数字;

热门文章

  1. envi查看灰度直方图_2.ENVI软件操作基础——查看数据属性特征
  2. 游戏感:虚拟感觉的游戏设计师指南——第九章 润色的测量方法
  3. 分享一个蓝月传奇3D手游辅助脚本,需要的可以看一下
  4. Subversion commit log 自動寄信通知
  5. VMware虚拟机扩容——Ubuntu的/dev/sda1分区挂在根目录(“/“)下用LVM(逻辑卷管理)模式扩容无效
  6. 云桌面与桌面云,到底有什么区别?
  7. ajax mvc 服务器 怎么设置,ajax mvc 服务器 怎么设置
  8. 协方差与皮尔森相关性系数
  9. Java编程要学哪些软件?这些都是免费的
  10. 职言 | 校招面试有感,一个面试官的几点建议