Java中redis面试题

面试题一

问:简单介绍下,你项目中用到的缓存

答:项目中经常用到的缓存是redis。

问:redis是单线程还是多线程的? 线程安全吗?

答:redis版本在4.0之前都是单线程运行的,所有的客户端请求处理/命令执行以及数据读写操作都是在一个主线程中完成得。这种设计的目的就是为了防止多线程环境下的锁竞争和上下文切换所带来的性能开销,这样保证在高并发场景下的性能。

关于线程安全问题,从redis服务层面看,redis server 本身就是一个线程安全的

按K-V数据库,也就是说在Redis Server 上面执行的指令,不需要任何同步机制,不会存在现场安全问题。

问:为什么redis 4.0之前会选择使用单线程?而且使用单线程还那么快?

答:选择单线程个人觉得主要是使用简单,不存在锁竞争。可以在无锁的情况下完成所有操作。不存在死锁和线程切换带来的性能和时间上的开销。但单线程也不能完全发挥出多核CPU的性能。

单线程快的原因

大部分操作都是在内存中完成的,内存中的执行率本身就是很快的,并且采用了高效的数据结构,比如哈希表,跳表。

使用单线程避免了使用多线程的竞争,节省了多线程切换带来的时间和性能开销。并且不会出现死锁。

采用I/O 多路复制机制处理大量客户端socket请求,因为这是基于非阻塞的I/O模型。让redis进行高效的网诺通讯。I/O读写流程不在阻塞。

问:你项目中使用的redis ,那redis是 如何实现数据不丢失的

答:redis数据是存储在内存中的,为保证不丢失就要从内存存储到磁盘上,以便在服务器重启之后能从磁盘中恢复原有的数据。这就是redis数据的持久化。

内存持久化的三种方式

AOF日志:记录所有操作命令,并以文本的形式追加在文件中

RDB快照:将某一个时刻的内存数据,以二进制方式写入磁盘。

持久化方式:redis4.0混合持久化方式,集成了AOF和RDB的优点。

相关推荐
程序员JerrySUN4 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
行百里er4 小时前
Redis 版本演进、新特性与协议那些事儿
redis·后端
Asurplus4 小时前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
Joy T5 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者5 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN11426760085 小时前
1.3第一个程序的介绍
开发语言·qt
天若有情6735 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
blue_ice .5 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988726 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
西峰u6 小时前
Java单例模式|从基础到多线程安全
java·java单例模式