七天玩转Redis | Day7 Redis常见面试题及课程总结
Posted diviner_ss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七天玩转Redis | Day7 Redis常见面试题及课程总结相关的知识,希望对你有一定的参考价值。
文章目录
- 一、Redis常见面试题
- 面试题1:说说你对Redis的认识?
- 面试题2:Redis有哪些优缺点?
- 面试题3:Redis使用单线程模型为什么性能依然很好?
- 面试题4:Redis除了做缓存,还能做什么?
- 面试题5:Redis常见数据结构的使用场景?string类型:一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
- 面试题6:Redis在6.0之前为什么没有多线程
- 面试题7:Redis如何判断数据是否过期?
- 面试题8:Redis中数据的六大淘汰策略?
- 面试题9:Redis的事务机制及CAS
- 面试题10:Redis持久化机制有哪些?各有什么优缺点?
- 面试题11:什么是主从复制?
- 面试题12:使用Redis常遇到的问题?
- 面试题13:什么是缓存雪崩?
- 面试题14:什么是缓存穿透?
- 面试题15:什么是缓存击穿?
- 二、课程总结
一、Redis常见面试题
面试题1:说说你对Redis的认识?
RedisRedis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是说它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
另外,Redis 除了做缓存之外,也经常用来做分布式锁,消息队列。
Redis 提供了五种数据类型和三大特殊数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
重点还是讲清楚Redis与其他传统数据库的不同,优缺点,特性等等。
面试题2:Redis有哪些优缺点?
优点:
- 性能极高
- 支持数据的持久化,对数据的更新采用Copy-3. on-write技术(写拷贝),可以异步的保存在磁盘上
- 具有丰富的数据类型
- 原子性:多个操作通过MULTI和EXEC指令支持事务
- 具有丰富的特性:key过期
- 支持数据的备份,快速的主从复制
- 可用于节点集群
缺点:
- 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写
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类型:一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
- 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的恢复率高
缺点:数据安全性低,RDB是间隔一段时间进行持久化,若期间redis发生故障,可能发生数据丢失。 - 2、AOF:指所有的命令记录以redis命令请求协议的格式完全持久化存储,保存为aof文件
优点: 数据安全
缺点: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的一部分框架。但是在以后慢慢接触继续学习。
以上是关于七天玩转Redis | Day7 Redis常见面试题及课程总结的主要内容,如果未能解决你的问题,请参考以下文章
七天玩转Redis | Day7 Redis常见面试题及课程总结
七天玩转Redis | Day7 Redis常见面试题及课程总结
七天玩转Redis | Day7 Redis常见面试题及课程总结
七天玩转Redis | Day7Redis常见面试题及课程总结