首页 > 数据库 >Java后端面试题(redis相关1)(day7)

Java后端面试题(redis相关1)(day7)

时间:2024-08-08 21:29:12浏览次数:13  
标签:AOF 面试题 Java 过期 day7 Redis 内存 淘汰 数据

目录

为什么要用Redis?


  1. 基于内存操作,内存读写速度快
  2. 支持多种数据类型,包括String、Hash、List、Set、ZSet等
  3. 支持持久化,Redis支持 RDBAOF 两种持久化机制,持久化功能可以有效地避免数据丢失问题
  4. 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
  5. 支持高并发,使用IO模型(epoll), 天生支持高并发.
  6. 工作线程单线程,即避免频繁的上下文切换,又避免了线程安全问题,Redis6.0之后IO线程引入了多线程

Redis到底是多线程还是单线程?


单线程&多线程
对于Redis到底是多线程还是单线程,分为两个阶段:

  • Redis 6.0 之前
    Redis是 单线程 的,IO操作和计算操作串行执行
  • Redis 6.0之后 :
    Redis 将IO操作交给IO线程处理,并且使用线程池,使 IO线程实现多线程 并行执行IO操作,而计算操作由工作线程处理,工作线程仍保持单线程

Redis数据持久化机制


持久化就是把内存的数据写到磁盘中,防止服务宕机导致内存数据丢失。

Redis支持两种方式的持久化,一种是 RDB 的方式,一种是 AOF 的方式。前者会根据指定的规则定时将内存中的数据存储在硬盘上,而后者在每次执行完命令后将命令记录下来。一般将两者结合使用。

RDB方式

RDB 是 Redis 默认的持久化方案。RDB 持久化时会将内存中的数据写入到磁盘中,也就是快照(Snapshot),数据恢复是将快照文件直接读到内存中。

RDB的优缺点:

  • 缺点
    1. 快照时间有间隔,不能实时备份,丢失数据可能会比较多
    2. 开启子进程备份数据,在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端。
  • 优点
    1. 恢复数据比较快
    2. 备份的文件就是原始内存数据的大小,不会额外增加数据占用

AOF方式

AOF(append only file)持久化:以独立日志的方式记录每次写命令,Redis重启时会重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,AOF 是Redis持久化的主流方式。

AOF的优缺点:

  • 优点
    1. 数据安全性高,不易丢数据
    2. AOF文件有序保存了所有写操作,可读性强
  • 缺点
    1. AOF方式生成文件体积变大
    2. 数据恢复速度比RDB慢

Redis是单线程,但为什么快?


  1. Redis 基于内存,内存的访问速度比磁盘快很多
  2. 单线程操作,避免了频繁的上下文切换
  3. 合理高效的数据结构
  4. 采用了非阻塞I/O多路复用机制 epool

Redis 过期删除策略


  1. 惰性删除 :放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
  2. 定期删除 每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定

Redis 内存淘汰策略


Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

Redis 提供 8 种数据淘汰策略:

LRU 全称Least recently used, 淘汰的是最近最久未使用的数据项。

LFU 全称Least-frequently used,淘汰的是最近访问频率最低的数据项,4.0及以上版本可用。

范围淘汰策略名称策略含义人话
默认策略noeviction不淘汰数据;写不进去返回错误不删除任意数据,这时如果内存不够时,会直接返回错误
只针对设置
过期的keys
volatile-lru根据 LRU 算法挑选数据淘汰从设置了过期时间的数据集中,选择最近最久未使用的数据释放
volatile-lfu根据 LFU 算法挑选数据淘汰 淘汰掉设置了过期时间的key过去被访问次数最少的数据
volatile-random随机挑选数据淘汰从设置了过期时间的数据集中,随机
volatile-ttl挑选越早过期的数据进行删除从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作 所有keys
所有keysallkeys-lru根据 LRU 算法挑选数据淘汰从数据集中(包括设置过期时间以及未设置过期时间的数据集中)
选择最近最久未使用的数据释放
allkeys-random随机挑选数据淘汰随机选择一个数据进行释放
allkeys-lfu LFU 算法挑选数据淘汰淘汰掉过去被访问次数最少的一条数据

标签:AOF,面试题,Java,过期,day7,Redis,内存,淘汰,数据
From: https://blog.csdn.net/qq_57036151/article/details/140926546

相关文章

  • Java设计模式和AOP编程
    Java六大设计原则;Java23种设计模式(在此介绍三种设计模式)Java设计模式单例模式应用场景:spring中bean的作用域用的就是单例模式//基本的单例模式————懒汉式publicclassstudent{//3.创建static修饰的成员变量privatestaticstudentstu;//1.设计私......
  • Java方法06:递归
    A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自己不调用自己。否则,就是个死循环!递归算法重点:递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方......
  • Java方法03:方法的重载
    上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:publicstaticdoublemax(doublenum1,doublenum2){ if(num1>num2){ returnnum1; }else{ returnnum2; }}......
  • Java方法04:拓展命令行传参
    有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。命令行参数是在执行程序时候紧跟在程序名字后面的信息。【下面的程序打印所有的命令行参数】publicclassCommandLine{ publicstaticvoidmain(Stringargs[]){ for(inti=0;i<arg......
  • Java方法05:可变参数
    JDK1.5开始,Java支持传递同类型的可变参数给一个方法。方法的可变参数的声明如下所示:typeName...parameterName在方法声明中,在指定参数类型后加一个省略号(...)。一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。publicsta......
  • 基于java的可视化高校公寓管理系统(10621)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 基于javaweb的数学竞赛网站的设计与实现(10669)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • Java方法02:方法调用
    Java支持两种调用方法的方式,根据方法是否返回值来选择。当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。当方法返回一个值的时候,方法调用通常被当做一个值。例如:intlarger=max(30,40);Java......
  • Java方法01:方法的定义
    在之前的学习中我们经常使用到System.out.println(),那么它是什么呢?println()是一个方法。System是系统类。out是标准输出对象。这句话的用法是调用系统类System中的标准输出对象out中的方法println()。那么什么是方法呢?Java方法是语句的集合,它们在一起执行一个功......
  • 在一串字符串中Java使用正则匹配电话号码的方法
    1.使用正则表达式来匹配电话号码在Java中,使用正则表达式匹配电话号码是一个常见的需求。电话号码的格式可能因国家/地区而异,但一个典型的格式可能是这样的:(123)456-7890。在这个例子中,我将提供一个Java程序,该程序使用正则表达式来匹配这种格式的电话号码。首先,我们需要了解电话......