首页 > 数据库 >Java八股复习指南-Redis

Java八股复习指南-Redis

时间:2024-07-25 17:11:47浏览次数:14  
标签:文件 Java 复习 fsync AOF 写入 Redis 持久

Redis基础:

Redis为什么快

  1. 基于内存,内存访问速度比磁盘快
  2. 基于Reactor 模式设计开发单线程事件模型和io多路复用
  3. 内置了多种优化的数据类型
  4. 通信协议实现简单且解析高效

Redis基本数据类型

String

  • 需要存储常规数据的场景:缓存 Session、Token、图片地址、序列化后的对象(相比较于 Hash 存储更节省内存)。

  • 需要计数的场景:用户单位时间的请求数(简单限流可以用到)、页面单位时间的访问数。

  • 分布式锁SETNX key value

List

List 实现为一个双向链表

Hash

Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象

Set

Set 类型是一种无序集合,集合中的元素没有先后顺序但都唯一

  • 需要获取多个数据源交集、并集和差集的场景
  • 需要随机获取数据源中的元素的场景

Sorted Set

和 Set 相比,Sorted Set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列

Redis持久化

使用缓存的时候,我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中。

Redis支持三种持久化方式

  • RDB:快照
  • AOF:只追加文件
  • RDB和AOF的混合持久化

RDB持久化:

Redis可以通过创建快照来获得在内存里面的数据在某个时间点上的副本。

Redis提供了两个命令生成RDB快照

  • save:同步保存,会阻塞主线程
  • bgsave:fork出一个子进程,子进程执行,不会阻塞Redis主线程。

AOF持久化

什么是AOF持久化

AOF持久化的实时性更好

开启AOF持久化后,每执行一条会更改Redis中的数据的命令,Redis就会将命令写入AOF缓冲区,然后再写入到AOF文件中,最后再根据持久化方式的配置决定何时同步到硬盘中。

AOF的工作流程

  1. 命令追加:将所有的写命令追加到AOF缓冲区。
  2. 文件写入:将AOF缓冲区的数据写入AOF文件。需要调用write函数,将数据写入系统内核缓冲区之后直接返回。
  3. 文件同步:根据对应的持久化方式向硬盘做同步操作。这一步调用fsync函数,强制刷新系统内核缓冲区,同步到硬盘。
  4. 文件重写:随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。
  5. 重启加载:当Redis重启时,可以加载AOF文件进行数据恢复。

aof-work-process

持久化方式是什么?有哪些?

AOF持久化方式是指,系统调用fsync函数的策略。

  1. appendfsync always:主线程调用 write 执行写操作后,后台线程( aof_fsync 线程)立即会调用 fsync 函数同步 AOF 文件(刷盘),fsync 完成后线程返回,这样会严重降低 Redis 的性能(write + fsync)。

  2. appendfsync everysec:主线程调用 write 执行写操作后立即返回,由后台线程( aof_fsync 线程)每秒钟调用 fsync 函数(系统调用)同步一次 AOF 文件(write+fsyncfsync间隔为 1 秒)

  3. appendfsync no:主线程调用 write 执行写操作后立即返回,让操作系统决定何时进行同步,Linux 下一般为 30 秒一次(write但不fsyncfsync 的时机由操作系统决定)。

AOF在执行写命令后记录日志

关系型数据与Redis之所以不同,主要由于他们的设计目标和适用场景的差异

mysql在执行命令之前记录日志是因为:注重数据的完整性和一致性,虽然增加了写入操作的开销,但保证了数据的完整性和一致性,也方便了故障恢复到一致的状态。

Redis是在执行命令之后记录日志,要求最大限度提高性能,保证了高性能和低延时的特点。

好处

  • 避免额外的检查开销,AOF记录日志不会对命令进行语法检查
  • 在命令执行之后再记录日志,不会阻塞当前命令执行。

不足

  • 如果刚执行完命令发生宕机,会导致对应的修改丢失
  • 可能会阻塞后续其他命令的执行

AOF重写

工作流程

  1. 创建快照

AOF会创建当前数据集的一个数据快照,并以最小的命令集合重写所有数据。也就是说,它能根据当前数据库状态生成能够重建当前数据的最小集合命令。

  1. 写入新文件

Redis将新生成的命令集合写入新的AOF文件,这样极大的缩减了文件的大小。

  1. 原子替换
  • 在重写过程中,Redis继续将新的写操作追加到现有AOF文件和新AOF文件中,确保在重写阶段数据不丢失。
  • 重写完成后,用新的AOF文件代替旧AOF文件,这一操作是原子的,确保数据不丢失。完成重写

标签:文件,Java,复习,fsync,AOF,写入,Redis,持久
From: https://www.cnblogs.com/forest-pan/p/18323648

相关文章

  • java初识
    JAVA初识1.JDK,JRE和JVM1.1JDK(JavaDevelopmentKit,Java开发工具包)Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、Java程序打包工具jar、Java程序运行环境JRE、文档生成工具javadoc以及很多用于开发的工具,如调试工具jdb等。1.2JRE(Java......
  • JAVA基础语法
    JAVA基础语法1.关键字和保留字1.1关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构。关键字中所有字母都为小写,目前共计50个(包括2个保留字)。1.2保留字保留字是为Java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关......
  • JAVA反射
    JAVA反射一、什么是反射二、反射的应用2.1Class类2.2获取类的成员变量2.3获取成员方法2.4获取构造函数2.5通过反射创建对象2.6通过反射修改属性(常用)2.7通过反射调用方法(常用)三、常见面试题3.1怎么给类中私有属性赋值一、什么是反射反射就是把java类中的各......
  • (三)复习第三课(07.20- 07.25第二轮):HTML标签元素练习大全
    <!DOCTYPEhtml><!--练习时间:2024.07.20-2024.07.25--><htmllang="en"><!--添加了en可以让你的网站打开时会提示翻译--><head> <pid="head1"></p><metacharset="utf-8"><!--对于中文网页需要使用此标签声明编码,否则会出现......
  • Redis篇
    目录Redis持久化方式方式一:RDB1、实现命令2、RDB执行原理方式二:AOF1、开启AOF模式2、AOF记录的频率(又称刷盘策略)3、命令重写两种持久化方式对比Redis数据过期策略1、惰性删除2、定时删除Redis数据淘汰策略分布式锁如何保证Redis的高并发高可用一、高并发主从数据同步二、高可用脑......
  • java跨平台原理
    跨平台是指程序可以在多种平台(MicrosoftWindows、AppleMacintosh和Linux等)上运行,即编写一次,随处运行(WriteOnce,RunAnywhere)。Java语言通过为每个计算机系统提供一个叫做Java虚拟机的环境来实现跨平台。Java虚拟机是可运行Java字节码的虚拟计算机系统。可以将Java虚拟机看成......
  • JavaSE笔记
    目录一、JAVA基础编程二、第一阶段--JAVA基本语法2.1关键字与保留字2.2标识符2.3变量2.4运算符2.5从键盘获取输入Scanner类2.6流程控制结构2.7循环结构番外篇--软件开发流程番外篇--IDEA使用经验IDEA项目结构2.8一维数组数组的特点2.8.1声明与初始化2.8.1.1静态初始化2.......
  • JavaWeb第一天
    目录HTML+CSS+JS学习VUE框架学习Ajax--异步JavaScript和XMLVue项目结构MavenMaven坐标依赖管理传递依赖&排除依赖依赖范围生命周期Web入门springboot快速入门HTTP协议HTTP请求数据格式HTTP响应数据格式Tomcat请求响应1、请求请求参数设置2、响应3、案例4、分层解耦三层架构分层解......
  • JavaWeb第二天
    目录tlias案例实践登录校验1,Cookie技术——存储在客户端2,Session技术——存储在服务端3,令牌Token技术JWT(JSONWebToken)令牌4,过滤器Filter定义过滤器Filter拦截路径过滤器链5、拦截器interceptor6、全局异常处理器7、Spring事务管理事务进阶——事务属性AOP——面向切面编......
  • java处理超大文件面试题
    java海量大文件数据处理方式 1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s遍历文......