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

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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中查询,查询不到后去数据库中查询。

缓存穿透的如何避免:

  1. 缓存空对象:如果⼀个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进⾏缓存,但它的过期时间会很短,最⻓不超过五分钟。
  2. 接口层增加校验,对传参进行个校验,比如说我们的id是从1开始的,那么id<=0的直接拦截;
  3. 缓存中取不到的数据,在数据库中也没有取到,这时可以将key-value对写为key-null,这样可以防止攻击用户反复用同一个id暴力攻击
  4. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
  5. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。

B,缓存击穿:就是一个很热门的数据,突然失效,而此时大量请求到服务器数据库中。

最好的办法就是设置热点数据永不过期。热点数据快要过期时,异步线程去更新和设置过期时间。

此外还可以采用互斥锁方案。

C,缓存雪崩:概念上是大量数据同一时间失效。此刻无数的请求直接绕开缓存,直 接请求数据库。

造成缓存雪崩的原因,有以下2种: reids宕机,可以通过构造redis集群解决! 大部分数据失效。可通过均匀设置过期时间解决,即让过期时间相对离散一点。

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

Redis的持久化机制有RDB和AOF。

RDB把内存数据以快照的形式保存到磁盘上。其核心的配置:

save <seconds> <changes>

# save ""

save 900 1

save 300 10

save 60 10000

可以进行备份和全量复制,但是无法做到实时的持久化。适合大规模的数据恢复。

RDB做不到实时的持久化,但AOF可以。采用日志的形式来记录每个写操作,追加到文件中,通过重启执行AOF来恢复数据。

Redis默认是把AOF关闭的,我们可以把它打开。no改为yes

appendonly yes

AOF数据的完整性和一致性更高,

但是,因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

基于以上分析,若只打算用Redis 做缓存,可以关闭持久化。

若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。所以还是要根据不同的需求,去做不同的操作。

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

redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。其实面试除了考察 Redis,大厂对于底层、分布式、微服务考察很多!

13,说下Redis的淘汰策略?

Redis的淘汰策略有8种,分别为:noeviction,volatile-lru,volatile-lfu,volatile-ttl,volatile-random,allkeylru,allkeys-lfu,allkeys-random

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

我们都知道Redis最主要的就是缓存,在网站中应用最广泛,可以很明显的提高访问的速度,减少数据库的压力!和memcached相比,redis更加的强悍,因为提供了丰富的数据结构,还提供了RDB和AOF等持久化机制。通常运用在如下场景:

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

一般有三种模式,分别为主从模式(Replication-Sentinel模式)、哨兵模式、集群模式。

主从模式:

主从模式是部署多台服务器,有主节点和从节点,主节点负责读写,从节点负责读。

首先是master和slave的连接,然后会将自身的数据复制给slave。

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值