java面试之Redis篇

Posted Java小周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试之Redis篇相关的知识,希望对你有一定的参考价值。

目录

一、什么是Redis?

二、Redis与其他key-value存储有什么不同?

三、Redis的数据类型?

四、使用Redis有哪些好处?

五、Redis是单进程单线程的?

六、一个字符串类型的值能存储最大容量是多少?

七、Redis持久化机制

八、单线程的redis为什么这么快?

九、为什么Redis的操作是原子性的,怎么保证原子性的?

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

十二、说说Redis哈希槽的概念?

十三、Redis的内存用完了会发生什么?

十四、如果有大量的key需要设置同一时间过期,一般需要注意什么?

一、什么是Redis?

Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis与其他key-value缓存产品有以下三个特点:

1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

3、Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势

1、性能极高

2、原子–Redis的所有操作都是原子性的

3、丰富的特性–Redis还支持通知,key过期等等特性。

二、Redis与其他key-value存储有什么不同?

1、Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。

2、Redis 运行在内存中但是可以持久化到磁盘

3、同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

三、Redis的数据类型?

Redis支持五种数据类型: 

1、string(字符串)

2、hash(哈希)

3、list(列表)

4、set(集合)

5、zset(有序集合)

四、使用Redis有哪些好处?

1、速度快,因为数据存在内存中,类似于HashMap

2、支持丰富数据类型,支持string,list,set,Zset,hash等

3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

五、Redis是单进程单线程的?

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

六、一个字符串类型的值能存储最大容量是多少?

512M。

七、Redis持久化机制

Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。

实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。

八、单线程的redis为什么这么快?

1、纯内存操作

2、单线程操作,避免了频繁的上下文切换

3、采用了非阻塞I/O多路复用机制

        上下文切换就是cpu在多线程之间进行轮流执行(抢占cpu资源),而redis单线程的,因此避免了繁琐的多线程上下文切换。

九、为什么Redis的操作是原子性的,怎么保证原子性的?

1、对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

2、Redis的操作之所以是原子性的,是因为Redis是单线程的。

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

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

十一、是否使用过Redis集群,集群的原理是什么?

1)、Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。

2)、Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储。

十二、说说Redis哈希槽的概念?

        Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384 取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

十三、Redis的内存用完了会发生什么?

        如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将Redis当缓存来使用配置淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容。

十四、如果有大量的key需要设置同一时间过期,一般需要注意什么?

        如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

关于Redis的一些概念都在这了

还有一些补充内容见:(9条消息) 面试问题总结_Java小周的博客-CSDN博客

下期再见。

以上是关于java面试之Redis篇的主要内容,如果未能解决你的问题,请参考以下文章

java面试之Redis篇

java面试之Redis篇

JAVA面试常见问题之Redis篇

java面试八股文之------Redis夺命连环25问

Redis 面试宝典之 Redis 如何处理已经过期的数据?

聊聊 Redis 内存淘汰策略