Redis常见面试题
这篇文章以面试问答形式系统梳理了 Redis 的核心知识面,覆盖基础认知、数据结构、线程模型、持久化、主从/哨兵/集群、缓存一致性与高可用实践。基础认知与定位从“为什么使用 Redis”切入,强调其内存访问、高吞吐、低延迟特性。对比 Redis 与 Memcached 的能力边界,包括数据结构、持久化、复制与运维能力。…
Redis 常见面试题 提纲#认识 Redis#什么是 Redis? 我们直接看 Redis 官方是怎么介绍自己的。 img Redis 官方的介绍原版是英文的,我翻译成了中文后截图的,所以有些文字读起来会比较拗口,没关系,我会把里面比较重要的特性抽出来讲一下。 Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。 除此之外,Redis 还支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。#Redis 和 Memcached 有什么区别? 很多人都说用 Redis 作为缓存,但是 Memcached 也是基于内存的数据库,为什么不选择它作为缓存呢?要解答这个问题,我们就要弄清楚 Redis 和 Memcached 的区别。 Redis 与 Memcached 共同点:都是基于内存的数据库,一般都用来当做缓存使用。都有过期策略。两者的性能都非常高。 Redis 与 Memcached 区别:Redis 支持的数据类型更丰富(String、Hash、List、Set、ZSet),而 Memcached 只支持最简单的 key-value 数据类型;Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memcached 没有持久化功能,数据全部存在内存之中,Memcached 重启或者挂掉后,数据就没了;Redis 原生支持集群模式,Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持;#为什么用 Redis 作为 MySQL 的缓存? 主要是因为 Redis 具备「高性能」和「高并发」两种特性。 1、Redis 具备高性能 假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据缓存在 Redis 中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了,操作 Redis 缓存就是直接操作内存,所以速度相当快。 img 如果 MySQL 中的对应数据改变的之后,同步改变 Redis 缓存中相应的数据即可,不过这里会有 Redis 和 MySQL 双写一致性的问题,后面我们会提到。 2、 Redis 具备高并发 单台设备的 Redis 的 QPS(Query Per Second,每秒钟处理完请求的次数) 是 MySQL 的 10 倍,Redis 单机的 QPS 能轻松破 10w,而 MySQL 单机的 QPS 很难破 1w。 所以,直接访问 Redis 能够承受的请求是远远大于直接访问 MySQL 的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。#Redis 数据结构#Redis 数据类型以及使用场景分别是什么? Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。 img img 随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。 Redis 五种数据类型的应用场景:String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。List 类型的应用场景:消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等。Hash 类型:缓存对象、购物车等。Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。Zset 类型:排序场景,比如排行榜、电话和姓名排序等。 Redis 后续版本又支持四种数据类型,它们的应用场景如下:BitMap(2.2 版新增):二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等;HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;GEO(3.2 版新增…
正在初始化 WebAssembly 引擎…
首次编译原生模块可能需要数秒
就绪后,页面交互将以接近原生的速度运行