Redis相关java面试题

  1. 什么是 Redis

Redis ,全称 Remote Dictionary Server ,是一个基于内存的高性能 Key-Value 数据库。

另外,Redis 已经成为互联网公司在缓存组件选择的唯一,更多的关注点是,如何使用好 Redis

  1. Redis 有什么优点

 1. 速度快

因为数据存在内存中,类似于 HashMap ,HashMap 的优势就是查找和操作的时间复杂度都是O (1) 。

Redis 本质上是一个 Key-Value 类型的内存数据库,很像Memcached ,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。

因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value 数据库。

如果我们查看在阿里云销售的 Redis 规格,最低的也是 8W QPS 。

2. 支持丰富数据类型

支持 String ,List,Set,Sorted Set,Hash 。

Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 Value 的最大限制是1GB,不像 Memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。比方说:

用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性能消息队列服务。

用他的 Set 可以做高性能的 tag 系统等等。

3. 丰富的特性

订阅发布 Pub / Sub 功能

Key 过期策略

事务

支持多个 DB

计数

并且在 Redis 5.0 增加了 Stream 功能,一个新的强大的支持多播的可持久化的消息队列,提供类似 Kafka 的功能。

4. 持久化存储

Redis 提供 RDB 和 AOF 两种数据的持久化存储方案,解决内存数据库最担心的万一Redis 挂掉,数据会消失掉。

  1. Redis 有什么缺点

1、由于 Redis 是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然 Redis 本身有 Key 过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

另外,可使用 Redis Cluster、Codis 等方案,对 Redis 进行分区,从单机 Redis 变成集群 Redis 。

2、如果进行完整重同步,由于需要生成 RDB 文件,并进行传输,会占用主机的 CPU ,并会消耗现网的带宽。不过 Redis2.8 版本,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的备机。

3、修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,Redis 不能提供服务。

  1. 为什么 Redis 单线程模型也能效率这么高?

1、纯内存操作

Redis 为了达到最快的读写速度,将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以 Redis 具有快速和数据持久化的特征。

如果不将数据放在内存中,磁盘 I/O 速度会严重影响 Redis 的性能。

2、核心是基于非阻塞的 IO 多路复用机制。

3、单线程反而避免了多线程的频繁上下文切换问题。

Redis 利用队列技术,将并发访问变为串行访问,消除了传统数据库串行控制的开销

  1. Redis 全程使用 hash 结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
  1. Redis 是单线程的,如何提高多核 CPU 的利用率

可以在同一个服务器部署多个 Redis 的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个 CPU ,你可以考虑一下分区。

  1. Redis 有几种持久化方式

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

2、【增量】AOF持久化,以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

  1. Redis 有几种数据“过期”策略

Redis 的过期策略,就是指当 Redis 中缓存的 key 过期了,Redis 如何处理。

Redis 提供了 3 种数据过期策略:

被动删除:当读/写一个已经过期的 key 时,会触发惰性删除策略,直接删除掉这个过期 key 。

主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以 Redis 会定期主动淘汰一批已过期的 key 。

主动删除:当前已用内存超过 maxmemory 限定时,触发主动清理策略,即 「数据“淘汰”策略」 。

在 Redis 中,同时使用了上述 3 种策略,即它们非互斥的。

  1. 聊聊 Redis 使用场景

数据缓存

会话缓存

时效性数据

访问频率

计数器

社交列表

记录用户判定信息

交集、并集和差集

热门列表与排行榜

最新动态

消息队列

分布式锁

  1. Redis缓存穿透

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 

解决

我们的解决方案:如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

  1. 阐述你对于Redis穿透和雪崩的一个理解
  • 雪崩:

雪崩是指缓存在同一时间内大量键过期(失效),接着来的一大波请求瞬间都落在了数据库中导致连接异常。

  • 穿透:

穿透是指短时间内大量的请求缓存中不存在的数据,导致这些请求全都落在了数据库中,使数据库瘫痪或者宕机。

解决:缓存和穿透都可以使用加锁,或者使用MQ解决,避免短时间大量请求同时进入数据库。

  1. 请简单描述一下Redis的发布订阅

Redis的发布订阅功能用于消息的传输,Redis的发布订阅包括三个部分,发布者,订阅者和Channel。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

  1. Redis有哪些操作是原子性的?

Redis所有的操作都是原子性的。常见的使用比如数值的自增等操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值