Java中redis面试题

简介: 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的优点。


问:数据库和redis进行同步保证双写的一致你们之前项目里面是如何做到的?


答:双写一致,当修改了数据库的数据也要同步更新缓存的数据库,缓存和数据库的数据要保持一致


读操作:缓存中存在,直接返回,缓存中未查询到先查数据库在写入缓存,设定超时时间。


写操作:延迟双删。


问:一般项目中是先删除缓存呢,还是先操作数据库?


答:先查询缓存,未命中查询数据库写入缓存。


     先操作数据库在删除缓存


问:数据库与redis进行同步保证双写的一致性?


答:采用的是redisson实现的读写锁,在读的时候添加共享锁,可以保证读写不互斥,读写互斥,我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证写数据的时候的同时是不会让其他现场读数据的,避免脏数据,这里需要注意的是读方法和写方法上需要同时使用一把锁才行。


目录
相关文章
|
4天前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
22 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
3天前
|
NoSQL 算法 Redis
Redis面试篇
Redis面试篇
20 5
|
4天前
|
存储 安全 Java
java基础面试题
java基础面试题
13 2
|
5天前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
21 4
|
5天前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
19 2
|
2天前
|
缓存 NoSQL 算法
面试题:Redis如何实现分布式锁!
面试题:Redis如何实现分布式锁!
|
4天前
|
NoSQL Java API
Java操作redis
Java操作redis
|
存储 缓存 移动开发
redis 面试总结
前段时间找工作搜索 golang 面试题时,发现都是比较零散或是基础的题目,覆盖面较小。而自己也在边面试时边总结了一些知识点,为了方便后续回顾,特此整理了一下。
179 0
redis 面试总结
|
8天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
40 1
|
存储 NoSQL 数据库