七天玩转Redis | Day7Redis常见面试题及课程总结

Posted 灰小猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七天玩转Redis | Day7Redis常见面试题及课程总结相关的知识,希望对你有一定的参考价值。

号外号外🎉🎉🎉:小猿和CSDN联合推出的“七天玩转Redis,打卡还能领周边”活动开始啦!点击查看👉🏻报名及活动细则👈🏻,轻轻松松和小伙伴们一起拿奖励吧!

PS:零基础也能入门Redis哟,快去一起参与拿周边吧!

博主简介👨🏼‍⚕️:国内某一线互联网公司Java工程师👨🏼‍💻,业余自媒体创作者💻,CSDN博客专家🏆,Java领域优质创作者📕,华为云享专家🥇,华为HDZ核心成员👨‍💼,曾发表并出版ISEAE信息科学国际论文,全网累计发表技术博客60余万📒,公众号【码猿编程日记】作者,坚信每一次敲动键盘都能让生活变得更智能,世界变得更有趣!

课前答疑:很多小伙伴问我零基础或者根本没有使用过Redis,可以学习嘛?当然是可以的!充分考虑到小伙伴们的学习程度有所不同,所以本次课程的所有操作都是在Windows环境下进行的,不会依赖太多的环境配置,且上手容易。已经学习过Redis的小伙伴们同样可以再学习一遍,温故而知新还能拿CSDN定制周边!何乐而不为呢😀

今日学习内容

在前六天的课程中,我们一起学习了如何安装Redis、认识Redis、Redis常用命令、五大数据类型、三大特殊数据类型、以及如何在Java中实操等等内容,最后还讲了如何在实际的springboot开发中使用Redis来进行配置集成。学习到这里,你应该对Redis会有一个全新的认识了吧?

到今天,我们七天玩转Redis课程就马上结束了,学以致用,那么学会了Redis,在找工作时会有哪些面试官爱问的问题呢?Redis之后更加深入的学习路线又是怎样的?最后让我们来一探究竟吧!

一、Redis常见面试题总结

(1)简单介绍一下Redis

Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是说它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。

另外,Redis 除了做缓存之外,也经常用来做分布式锁,消息队列。

Redis 提供了五种数据类型和三大特殊数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。

(2)Redis有哪些优缺点?

优点:

  1. 性能极高
  2. 支持数据的持久化,对数据的更新采用Copy-on-write技术(写拷贝),可以异步的保存在磁盘上
  3. 具有丰富的数据类型
  4. 原子性:多个操作通过MULTI和EXEC指令支持事务
  5. 具有丰富的特性:key过期
  6. 支持数据的备份,快速的主从复制
  7. 可用于节点集群

缺点:

  1. 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写
  2. 适合的场景主要局限在较小数据量的高性能操作和运算上

(3)Redis使用单线程模型为什么性能依然很好?

因为避免了线程切换的资源消耗,并且单线程不存在资源共享与竞争,不用考虑锁的问题。同时是基于内存的,内存的读写速度非常快,使用非阻塞的IO多路复用机制,数据存储进行了压缩优化
使用了高性能数据结构,如hash、跳表等

(4)Redis除了做缓存,还能做什么?

  • 分布式锁 : 通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Redisson 来实现分布式锁。
  • 限流 :一般是通过 Redis + Lua 脚本的方式来实现限流。
  • 消息队列 :Redis 自带的 list 数据结构可以作为一个简单的队列使用。Redis5.0 中增加的 Stream 类型的数据结构更加适合用来做消息队列。它比较类似于 Kafka,有主题和消费组的概念,支持消息持久化以及 ACK 机制。
  • 复杂业务场景 :通过 Redis 以及 Redis 扩展(比如 Redisson)提供的数据结构,我们可以很方便地完成很多复杂的业务场景比如通过 bitmap 统计活跃用户、通过 sorted set 维护排行榜。

(5)Redis常见数据结构的使用场景?

  • string类型:一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
  • list类型:发布与订阅或者说消息队列、慢查询。
  • hash类型:系统中对象数据的存储。
  • set类型:需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景
  • zSet类型:需要对数据根据某个权重进行排序的场景。比如在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息等信息。

(6)Redis在6.0之前为什么没有多线程

  1. 单线程编程容易并且更容易维护;
  2. Redis 的性能瓶颈不在 CPU ,主要在内存和网络;
  3. 多线程就会存在死锁、线程上下文切换等问题,甚至会影响性能。

(7)Redis如何判断数据是否过期?

Redis 通过一个叫做过期字典(可以看作是 hash 表)来保存数据过期的时间。过期字典的键指向 Redis 数据库中的某个 key(键),过期字典的值是一个 long long 类型的整数,这个整数保存了 key 所指向的数据库键的过期时间(毫秒精度的 UNIX 时间戳)。

(8)Redis中数据的六大淘汰策略?

  • noeviction:当内存达到阈值的时候,所有引起申请内存的命令都会报错。
  • allkeys-lru:在主键空间中,优先删除最近未使用的key(推荐)。
  • volatile-lru:在设置过期时间的键空间中,优先删除最近未使用的key。
  • allkeys-random:在主键空间中,随机删除key。
  • volatile-random:在设置了过期时间的键空间中,随机删除某个key。
  • volatile-ttl:在设置了过期时间的键空间中,优先删除更早过期时间的key。
     

(9)Redis的事务机制及CAS 

watch指令在redis事物中提供了CAS的行为。为了检测被watch的keys在是否有多个clients同时改变引起冲突,这些keys将会被监控。如果至少有一个被监控的key在执行exec命令前被修改,整个事物将会回滚,不执行任何动作,从而保证原子性操作,并且执行exec会得到null的回复。

(10)Redis持久化机制有哪些?各有什么优缺点?

1、RDB:数据集快照的方式半持久化模式,记录数据库的所有键值对,在某个时间点将数据写入临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,可恢复数据。
优点:

  1. 恢复操作简单,容灾性好
  2. 性能高,fork子进程进行写操作,主进程继续处理命令
  3. 大数据集比AOF的恢复率高

缺点:

  1. 数据安全性低,RDB是间隔一段时间进行持久化,若期间redis发生故障,可能发生数据丢失。

2、AOF:指所有的命令记录以redis命令请求协议的格式完全持久化存储,保存为aof文件
优点:

  1. 数据安全

缺点:

  1. AOF的持久化文件比RDB大,恢复速度慢

(11)什么是主从复制?

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

(12)使用Redis常遇到的问题?

  • 缓存和数据库双写一致性问题
  • 缓存雪崩问题
  • 缓存击穿问题
  • 缓存的并发竞争问题

(13)什么是缓存雪崩?

缓存雪崩,是指在某一个时间段,缓存集中过期失效。Redis宕机!

(14)什么是缓存穿透?

缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。

(15)什么是缓存击穿?

兄弟们注意啦!这里需要注意和缓存穿透的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

当某个key在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且回写缓存,会导使数据库瞬间压力过大。

二、Redis课程总结

兄弟们,截止到今天,七天玩转Redis的课程就结束啦!这七天的时间,我们学习了Redis的五大数据类型(string、list、hash、set、zset)和三大特殊数据类型(Gaospatial地理位置、Hyperloglog基数统计、Bitmap位图场景)的基本命令和使用,在这一点上,你已经超过了很多只会string类型操作Redis的同学。之后,我们还学习了如何通过Redis来实现事务操作,对数据的监听以及乐观锁的实现,考虑到同学们的基础不一,后面没有讲解分布式锁,但是之后也会继续更新!

在学习完Redis命令行操作时候,我们对Redis在Java中进行了实操,Redis在实际的开发中更多的还是用在spring系列的框架上,所以学习Java的小伙伴应该知道什么才是重要的了吧?同时我们还讲了在实际的企业项目开发中,如何应对开发的自定义RedisTemplate,以及修改Redis的配置文件。之后如果有用到,肯定能秀一波啦!

学以致用,最后在这篇文章上我们总结了Redis的常见面试题,充分帮助大家应对Redis的常见面试问题。最后兄弟们也是一路过关斩将,杀到了最后一天!!!

三、Redis路线展望

七天玩转Redis课程的学习,其实只是Redis能够应对简单企业项目开发的一些操作,如果在面对业务比较复杂的项目开发的时候,Redis需要学习的东西还有很多,比如架构、哨兵模式、集群、缓存及雪崩等等,

Redis的学习之路也仅仅不会仅限于此,在现在大数据和高用户的情景下,Redis的应用也会变得更加的复杂。我把Redis完整的学习路线给大家列了一个框架,大家可以按照学习,我之后也会慢慢的更新Redis之后的内容。欢迎大家加入社区或者关注我的博客学习!

今日总结

今天需要学习的内容主要就是掌握Redis的高频面试题,了解Redis之后的学习路线,Redis的学习之路漫漫,今天是一个结束也是一个新的开始!

感谢这七天在一起学习的所有小伙伴们!也感谢你们为了提出的建议和指正!Redis的内容我会继续更新,欢迎大家持续关注!💖💖💖

最后别忘记今天的总结打卡哟!【点击跳转社区打卡

在学习中存在任何问题的,大家都可以添加我的微信huixiaoyuan1030,(因为微信群二维码有效期只有七天😝),加入我们的“打卡答疑交流群一起抱团、一起进步!

点击下方卡片可以找到我的微信二维码👇🏻👇🏻👇🏻

以上是关于七天玩转Redis | Day7Redis常见面试题及课程总结的主要内容,如果未能解决你的问题,请参考以下文章

七天玩转Redis | Day7Redis常见面试题及课程总结

七天玩转Redis | Day7Redis常见面试题及课程总结

七天玩转Redis | Day7 Redis常见面试题及课程总结

七天玩转Redis | Day7 Redis常见面试题及课程总结

七天玩转Redis | Day7 Redis常见面试题及课程总结

七天玩转Redis | Day2Redis基本数据类型