java面试之Redis篇
Posted Java小周
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试之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篇的主要内容,如果未能解决你的问题,请参考以下文章