咱们一起来看看 redis 常问常用的面试题
Redis 是个啥?
http://www.redis.cn/ redis 中文网给了很明确且清晰的定义
- Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统
- Redis 可以用作数据库、缓存和消息中间件
- 支持的数据结构有 8 种
字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 geospatial
- 存取的数据都非常快,redis 的数据是直接在内存中操作的
- 特性丰富:可用于缓存,消息队列,等等
- 支持 8 种 数据类型
- redis 使用多路 I/O 复用模型,非阻塞 的 IO
- 采用单线程,就不会有上下文切换的消耗,不用去考虑加锁和解锁的事情,没有竞争资源出现的性能消耗
- 数据结构很简单,上述 8 种 数据类型,一学就会
- 操作 redis 的数据,基本是在妥妥的操作内存,必须快
- RDB 持久化方式
redis 通过 fork 的方式创建一个子进程来专门做持久化的动作
文章图片
优势
- 适合大规模的数据恢复
- 对数据的完整性要求不高
- 需要在一定的时间间隔进行操作,如果 redis 意外宕机,最后一次写入的数据就会丢失
- fork 子进程的时候需要占用一定的空间
- AOF 持久化方式
文章图片
优势
- 每一次操作 reids 都会被记录,文件的完整性好
- 每秒同步一次,可能会丢失一秒的数据
- 从不同步,这个效率是最高的
- 相对于数据文件来说,aof 文件会远大于 rdb 文件,修复的速度也比 rdb 文件慢
- aof 运行的效率比 rdb 慢,所以 redis 默认的配置是 rdb 持久化
- 简单的消息队列
- 用于缓存
- 用于计数器
- 做分布式锁
RedLock 是个啥
Redis 官方站提供的基于 Redis 实现分布式锁的方式,它有如下特性:
只要大部分 Redis 节点存活就可以正常提供服务
- 容错性
RedLock 是互斥访问的,永远只有一个 redis 客户端能拿到锁,执行操作
- 安全特性
最终 redis 客户端都可能拿到锁,不会出现死锁的情况
- 避免死锁
- 做排行榜
- 做共同关注,做发现身边的好友
Redis 的删除过期的 key 是如何处理的? 有 3 种方式:
- 定时过期
每个 key 都设置了过期时间就要弄一个定时器,这样非常消耗 cpu 资源,进而影响 redis 性能
- 定期过期
- 惰性过期
Redis 事务的本质是什么?
就是一组命令的集合,一个事务中所有的命令都会被序列化,在事务执行的过程,是按照顺序执行命令的,他们拥有
- 一次性
- 顺序性
- 排他性
redis 事务中,命令是这样执行的
【【Redis 系列】redis 学习十三,Redis 常问简单面试题】命令放在事务中,并没有马上执行,而是发起执行命令的时候才会执行,通过 exec 触发
文章图片
redis 是单条指令保证原子性,但是事务不保证原子性
执行一个事务的流程是这个样子的:
- multi 开启事务
- 各种命令入队
- exec 执行事务
- Atomicity 原子性
- Consistency 一致性
- Isolation 隔离性
- Durability 持久性
Redis 主从复制的原理是什么? Slave 启动成功连接到 master 后会发送一个 sync 命令
master 收到命令后,启动后台存盘进程,同时收集所有接收到用于修改数据库集命令,在后台进程执行完毕后,master 进程将传送整个数据文件给到 slave ,并完成一次同步
全量复制
slave 服务接收到 master 传过来的数据后,将其存盘并加载到内存
增量复制
master 将新的收集到的所有修改的命令依次传递给 slave ,并完成同步
一旦重新连接 master 节点,一次完全的全量同步就会被执行
哨兵模式是干啥的?
哨兵模式,主要是用于实现 redis 集群的高可用
因为使用主从复制的方式,当 redis 主机宕机时,没有办法选举出一个主机出来,哨兵模式可以
文章图片
哨兵的作用:
- 通过发送命令,Redis 服务器返回监控状态信息,包括主服务器和从服务器的
- 若哨兵检测到主服务器宕机,会自动将slave 切换 master,然后通过发布订阅通知其他从服务器,修改配置文件,让他成为主机
如果 master 服务器宕机了,那么其中一个哨兵就会检测到,系统并不会马上执行 failover 的过程,仅仅是当前这个哨兵,判断 master 不可用,这个就是主观下线
客观下线
集群中一般哨兵也是集群的,若部署了 3 个哨兵
当其他两个哨兵也发现 master 服务器不可用的时候,那么哨兵之间就会产生投票,具体的投票算法我们后续再写,投票的结构由一个哨兵发起,进行 failover 故障转移的操作,切换成功之后,就会通过发布订阅模式,让每一个监控的哨兵把自己监控的服务器切换到这个 master 服务器上, 这个就是 客观下线
redis 的 穿透,击穿,雪崩问题可以查看上一篇文章:【Redis 系列】redis 学习十二,redis 缓存穿透,缓存击穿,缓存雪崩
参考资料:
redis_doc
欢迎点赞,关注,收藏 朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
文章图片
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~
推荐阅读
- 环境搭建|Redis6.X?可?之Cluster集群和分?(三主三从)
- 【Redis 系列】redis 学习十二,redis 缓存穿透,缓存击穿,缓存雪崩
- Redis在项目中的应用总结
- Redis 缓存过期处理与内存淘汰机制
- Redis的持久化机制 - AOF
- php操作redis详解
- java操作redis详解介绍
- redis客户端连接、管道和redis分区
- redis备份、安全和基准测试介绍