Java基础到就业!项目加面试!之Redis面试大全!倾心整理【建议收藏】

您所在的位置:网站首页 redis主要功能 Java基础到就业!项目加面试!之Redis面试大全!倾心整理【建议收藏】

Java基础到就业!项目加面试!之Redis面试大全!倾心整理【建议收藏】

2023-02-15 18:46| 来源: 网络整理| 查看: 265

前前后后,小孟已经帮助很多的小伙伴挺近了大厂。

1,专科的粉丝拿到了阿里的offer,小孟直呼不可思议

2,❤️专科出身拿到阿里offer,小孟直呼666!【付硬核面试】❤️

3,大三下学期挂科,大四奋发图强,拿到阿里offer​​​​​​​

我是农村出来的娃,从程序员到项目主管到产品经理,到现在公司出任CEO!技术改变了我的命运。

我身边越来越多的朋友,从农村出来到现在在大城市安身立命,甚至在一线城市买车买房。有的已经成为大厂的Leader,年薪200w+。

所以关注我,不迷路。小孟拥有极光的互联网关系,可以找我内推各个大厂。

极度的说明了,只要努力,一切皆有可能!

技术改变世界,知识改变命运!

兄弟们,鸡汤已经喝完了,让我们开干!

 

 

前面已经分享了很多的面试题和项目:

 前面的话,已经分享了SpringBoot的相关知识,例如: 

1,Java基础大全,帮你省去2w的培训费

2,SpringBoot一天快速入门,超级肝货!【一】

3,SpringBoot一天快速入门,超级肝货!【二】

4,SpringBoot与分布式

5,肝完了,总结了SpringBoot与缓存的知识点,快速掌握

6,一天掌握数据结构和算法面试题,吊打面试官

7,整理了一周的Spring面试大全【含答案】

8,三天肝完设计模式的面试题,面试再不怕设计模式的问题了​​​​​​​

9,Mysql面试大全​​​​​​​

10,算法学习大全

当然也分享了很多的SpringBoot的项目,这些项目真的很肝!

1,基于springboot的在线教育系统分享

2,基于springboot的活动管理小程序系统分享

3,基于springcloud的微服务项目分享【视频教程+源码】

4,撸完这个springboot项目,我对boot轻车熟路【视频教程+源码】

今天复习Redis面试,Redis作为缓存系统,面试基本是常问的。因此必须要搞。

 

目录

1,什么是Redis

2,Redis和Memecache有什么区别?

3,Redis和Mysql的区别:

4,为什么要用reids,不用不行吗?

5,Redis为什么是单线程的?单线程可以处理高并发吗?

6,为什么Redis 6.0 之后改多线程呢?

7,Redis的五种类型有那些?

8,Redis常见的功能有哪些?

9,Redis的优缺点有哪些

10,说说缓存穿透,缓存雪崩以及缓存击穿?

11,说一下Redis的持久化机制。

12,MySQL 里有 1000w 数据,redis 中只存 10w 的数据,如何保证 redis 中的数据都 是热点数据?

13,说下Redis的淘汰策略?

14,请讲一下Redis的应用场景?

15,如何实现Redis的高可用?

1,什么是Redis

简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。

另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

最主要的Redis就是缓存应用!

2,Redis和Memecache有什么区别?

对于 redis 和 Memecache的区别有下面四点。

a.redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。

b.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。

c.集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 redis 目前是原生支持 cluster 模式的。

d.Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。

3,Redis和Mysql的区别:

redis: 内存型非关系数据库,数据保存在内存中,速度快

mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定的Io操作,访问速度相对慢

4,为什么要用reids,不用不行吗?

主要从“高性能”和“高并发”这两点来看待这个问题。在这两种情况下Redis非常的快。

首先看一下高性能:

假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

最重要的就是在高并发的时候,Redis非常的快。

直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

那么Redis为啥这么快呢?听小孟道来。

如果简单的解释就是:

首先,采用了多路复用io阻塞机制然后,数据结构简单,操作节省时间。并且,Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。最后,运行在内存中,Redis直接自己构建了VM机制 ,不会像一般的系统会调用系统函数处理,自然速度快。

5,Redis为什么是单线程的?单线程可以处理高并发吗?

Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小。再说了,单线程切换开销小,容易实现既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

当然可以处理高并发,Redis不就实现了吗?

6,为什么Redis 6.0 之后改多线程呢?

上面说了Redis是单线程的,Redis6.0之前Redis都是单线程的,就是处理客户端的数据时,读写都由一个顺序串行的主线程处理。

redis使用多线程并非是完全摒弃单线程,redis还是使用单线程模型来处理客户端的请求,只是使用多线程来处理数据的读写和协议解析,执行命令还是使用单线程。

这样做的目的是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程能提升IO读写的效率,从而整体提高redis的性能。

它的执行命令操作内存的仍然是个单线程。

 

7,Redis的五种类型有那些?

String 整数,浮点数或者字符串,使⽤场景:缓存、计数器、共享 Session、限速。

Set 集合,通常用在兴趣标签之类的。

Zset 有序集合,通常用在排行榜之类的。

Hash 散列表,哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。

List 列表,在 Redis 中,可以队列表两端插⼊和弹出,还可以获取指定范围的元素列表、获取指定索引下的元素等,列表是⼀种⽐较灵活的数据结构,它可以充当栈和队列的⻆⾊。

 

 

Set用的比较多,redis的端口号通常是6379:

127.0.0.1:6379> set key1 xiaomeng1 OK 127.0.0.1:6379> set key2 xiaomeng2 OK 127.0.0.1:6379> set key3 xiaomeng3 OK 127.0.0.1:6379> set key4 xiaomeng4 OK 127.0.0.1:6379> set key5 xiaomeng5 OK 127.0.0.1:6379> set key6 xiaomeng6 OK

除此之外,还有三种特殊的数据类型:

Geo:Redis3.2推出的,地理位置定位,用于存储地理位置信息,并对存储的信息进行操作。

HyperLogLog:用来做基数统计算法的数据结构。

Bitmaps :用一个比特位来映射某个元素的状态,在Redis中,它的底层是基于字符串类型实现的,可以把bitmaps成作一个以比特位为单位的数组。

8,Redis常见的功能有哪些?

1. 数据缓存功能

2. 分布式锁的功能

3. ⽀持数据持久化

4. ⽀持事务

5. ⽀持消息队列

9,Redis的优缺点有哪些

优点:

上面已经了列举了Redis的很多优点:

1,读写非常的快,提高网站的访问速度,Redis能读的速度是110000次/s,写的速度是81000次/s。强悍的一比。

2,持AOF和RDB两种持久化方式。

3,支持较多的数据结构类型,有String、hash、set、zset等等。

4,支持主从复制,主机可以自动的将数据同步到从机,从而进行读写分离。

5,支持AOF和RDB的持久化方式。

缺点:

任何的事物有优点,必然有缺点。Redis也不例外。

Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

10,说说缓存穿透,缓存雪崩以及缓存击穿?

A,缓存穿透:缓存穿透是指查询一条数据库和缓存都没有的一条数据,就会一直查询数据库,对数据 库的访问压力就会增大,缓存穿透的解决方案,再换个说法就是客户持续向服务器发起对不存在服务器中数据的请求。客户先在Redis中查询,查询不到后去数据库中查询。

缓存穿透的如何避免:

缓存空对象:如果⼀个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进⾏缓存,但它的过期时间会很短,最⻓不超过五分钟。 接口层增加校验,对传参进行个校验,比如说我们的id是从1开始的,那么id1并行 sentinel parallel-syncs mymaster 1 #故障转移开始,三分钟内没有完成,则认为转移失败 sentinel failover-timeout mymaster 180000

哨兵模式的架构图如下所示:

集群模式:

Redis 集群是一个提供在多个Redis节点间共享数据的程序集,对数据进行分片,也就是说每台Redis节点上存储不同的内容,来解决在线扩容的问题。哨兵模式基于主从模式,实现读写分离,它还可以自动切换,系统可用性更高。但是它每个节点存储的数据是一样的,浪费内存,并且不好在线扩容。

,

Redis Cluster有一个槽的概念,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所映射的键值数据,可以直接自动跳转到这个对应的节点上进行存取操作。

槽位的信息存储于每个节点中。只有master节点会被分配槽位,slave节点不会分配槽位。

参考文献:

http://www.redis.cn/ 《Redis设计与实现》

为了帮助大家快速面试,整理了很多的面试干货题和项目。

​​​​​​​👇🏻 干货可通过搜索下方 公众号 获取👇🏻



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3