你离阿里还差多少?阿里Java面试高频常问的Redis问题总结(含答案)

前言

现在的大厂面试,尤其是一面与二面都涉及到很深的Java基础功底及知识面,所以在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要。
小编这里整理了一份Java面试核心笔记资料,包括了包含集合,JVM,多线程并发,Spring,负载均衡,微服务,Redis,Dubbo,设计模式,数据结构,分布式等!
因为篇幅有限,这里小编就总结了一些常问的Redis问题,剩下的Java面试题和答案放在文章末尾。
在这里插入图片描述

Java面试 高频常问的Redis问题

1.什么是 Redis?

Redis 是一个基于内存的高性能 key-value 数据库。支持多种数据类型。

2. 简单描述一下 Redis 的特点有哪些?

Redis 本质上是一个 key-value 类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 key-value DB。Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构。此外单个 value 的最大限制是 1GB,不像 memcached 只能保存 1MB 的数据,因此 Redis 可以用来实现很多有用的功能。Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

3. Redis 持久化机制有哪些? 区别是什么?优缺点是什么?

Redis 提供两种方式进行持久化。

RDB 持久化:原理是将 Reids 在内存中的数据库记录定时 dump 到磁盘上的 RDB 持久化。
AOF(append only file)持久化:原理是将 Redis 的操作日志以追加的方式写入文件。

两者的区别:

RDB 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是 fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
在这里插入图片描述

AOF 持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
在这里插入图片描述

RDB 优点

RDB 是紧凑的二进制文件,比较合适备份,全量复制等场景;
RDB 恢复数据远快于 AOF。

RDB 缺点

RDB 无法实现实时或者秒级持久化;
新老版本无法兼容 RDB 格式。

AOF 优点

可以更好地保护数据不丢失;
appen-only 模式写入性能比较高;
适合做灾难性的误删除紧急恢复。

AOF 缺点:

对于同一份文件,AOF 文件要比 RDB 快照大;
AOF 开启后,写的 QPS 会有所影响,相对于 RDB 来说 写 QPS 要下降;
数据库恢复比较慢, 不合适做冷备。

4. Redis支持的数据类型

Redis 通过 key-value 的单值不同类型来区分, 以下是支持的类型: String、List、Set、Sorted Set 、Hash。

5. 为什么 Redis 需要把所有数据放到内存中?

1.追求最快的数据读取速度,如果直接磁盘读取会非常慢;
2.为了保证数据安全,也会异步方式将数据写入磁盘;
3.可以设置 Redis 最大使用的内存,若达到内存限值后将不能继续存入数据。

6. Redis 是单线程的吗?

Redis是单线程处理网络指令请求,所以不需要考虑并发安全问题。所有的网络请求都是一个线程处理。但不代表所有模块都是单线程。

7. Redis 的缓存失效策略有哪几种?

1.定时删除策略在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除。

**优点:**保证内存尽快释放。
**缺点:**若 key 过多,删除这些 key 会占用很多 CPU 时间, 而且每个 key 创建一个定时器,性能影响严重。

2.惰性删除策略key 过期的时候不删除,每次从数据库获取 key 的时候去检查是否过期,若过期,则删除,返回 null。

**优点:**CPU 时间占用比较少。
**缺点:**若 key 很长时间没有被获取, 将不会被删除,可能造成内存泄露。

3.定期删除策略每隔一段时间执行一次删除(在 redis.conf 配置文件设置 hz,1s 刷新的频率)过期 key 操作。

**优点:**可以控制删除操作的时长和频率,来减少 CPU 时间占用,可以避免惰性删除时候内存泄漏的问题。
**缺点:**对内存友好方面,不如定时策略对 CPU 友好方面,不如惰性策略Redis 一般采用:惰性策略 + 定期策略两个相结合。

8. 什么是缓存命中率?提高缓存命中率的方法有哪些?

命中:可以直接通过缓存获取到需要的数据。

不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。命中率越高表示使用缓存作用越好,性能越高(响应时间越短、吞吐量越高),并发能力也越好。重点关注访问频率高且时效性相对低一些的业务数据上,利用预加载(预热)、扩容、优化缓存粒度、更新缓存等手段来提高命中率。

9.Redis全局命令及数据库管理

10.Redis设计订单应用场景

11.Redis缓存雪崩讲讲看?

12.什么是缓存穿透?

13.Redis重启时加载AOF与RDB的顺序

14.Redis的数据结构—哈希(Hash)

15.Redis的数据结构—集合(set

16.Redis的数据结构—字符串

总结

其实面试不单单是只靠面试之前刷题那么简单,更多的还是平时的积累。
小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案免费分享给大家,希望能帮助到大家面试前的复习,也节省大家在网上搜索资料的时间来学习。有需要的朋友可以看下面的免费领取方式

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
领资料点这里:暗号CSDN

在这里插入图片描述
在这里插入图片描述

领资料点这里:暗号CSDN
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47955802/article/details/109005174
今日推荐