大家好,我是Tom哥~
为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于Redis 缓存,面试官一般喜欢问哪些问题?

接下来,我们逐条来看看每个问题及答案
Redis 有哪些特性?
答案:
MULTI和EXEC指令包起来。Redis 为什么这么快?
答案:
Redis 底层的基础数据结构有哪些?
答案:
Redis 支持哪些数据类型?
答案:五种常用数据类型:String、Hash、Set、List、SortedSet。三种特殊的数据类型:Bitmap、HyperLogLog、Geospatial,其中Bitmap 、HyperLogLog的底层都是 String 数据类型,Geospatial 底层是 Sorted Set 数据类型。
Redis 常用的 5 种数据结构和应用场景?
答案:
为什么采用单线程?
答案:官方回复,CPU不会成为Redis的制约瓶颈,Redis主要受内存、网络限制。例如,在一个普通的 Linux 系统上,使用pipelining 可以每秒传递 100 万个请求,所以如果您的应用程序主要使用 O(N) 或 O(log(N)) 命令,则几乎不会使用太多 CPU,属于IO密集型系统。
Redis 6.0 之后又改用多线程呢?
答案:Redis的多线程主要是处理数据的读写、协议解析。执行命令还是采用单线程顺序执行。
主要是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程进行一些周边预处理,提升了IO的读写效率,从而提高了整体的吞吐量。antirez 在 RedisConf 2019 分享时提到,Redis 6 引入的多线程 IO 对性能提升至少一倍以上。
过期键Key 的删除策略有哪些?
答案:有3种过期删除策略。惰性删除、定期删除、定时删除
如果Redis的内存空间不足,淘汰机制?
答案:
Redis 突然挂了怎么解决?
答案:1、从系统可用性角度思考,Redis Cluster引入主备机制,当主节点挂了后,自动切换到备用节点,继续提供服务。2、Client端引入本地缓存,通过开关切换,避免Redis突然挂掉,高并发流量把数据库打挂。
Redis 持久化有哪些方式?
答案:
1、快照RDB。将某个时间点上的数据库状态保存到RDB文件中,RDB文件是一个压缩的二进制文件,保存在磁盘上。当Redis崩溃时,可用于恢复数据。通过SAVE或BGSAVE来生成RDB文件。
2、只追加文件AOF。以日志的形式记录每个写操作(非读操作)。当不同节点同步数据时,读取日志文件的内容将写指令从前到后执行一次,即可完成数据恢复。
Redis 常用场景
答案:
Redis 缓存要注意的七大经典问题?
答案:列举了亿级系统,高访问量情况下Redis缓存可能会遇到哪些问题?以及对应的解决方案。
每个问题的详细解决方案,请查看 亿级系统的Redis缓存如何设计???
Redis 集群方案有哪几种?
答案:
Redis 主从数据同步(主从复制)的过程?
答案:
主从复制的优缺点?
答案:
1、优点:
缺点:
Sentinel(哨兵)模式的优缺点?
答案:哨兵模式基于主从复制模式,增加了哨兵来监控与自动处理故障。
1、优点:
2、缺点:
Redis Cluster 模式的优缺点?
答案:实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题。
1、优点:
gossip协议交换状态信息,用投票机制完成slave到master的角色转换缺点:
db 0。Redis Cluster模式不建议使用pipeline和multi-keys操作,减少max redirect产生的场景。Redis 如何做扩容?
答案:为了避免数据迁移失效,通常使用一致性哈希实现动态扩容缩容,有效减少需要迁移的Key数量。
但是Cluster 模式,采用固定Slot槽位方式(16384个),对每个key计算CRC16值,然后对16384取模,然后根据slot值找到目标机器,扩容时,我们只需要迁移一部分的slot到新节点即可。
Redis 的集群原理?
答案:一个redis集群由多个节点node组成,而多个node之间通过cluster meet命令来进行连接,组成一个集群。
数据存储通过分片的形式,整个集群分成了16384个slot,每个节点负责一部分槽位。整个槽位的信息会同步到所有节点中。
key与slot的映射关系:
CRC16 计算,计算出一个 16 bit 的值Redis 如何做到高可用?
答案:哨兵机制。具有自动故障转移、集群监控、消息通知等功能。
哨兵可以同时监视所有的主、从服务器,当某个master下线时,自动提升对应的slave为master,然后由新master对外提供服务。
什么是 Redis 事务?
答案:Redis事务是一组命令的集合,将多个命令打包,然后把这些命令按顺序添加到队列中,并且按顺序执行这些命令。
Redis事务中没有像Mysql关系型数据库事务隔离级别的概念,不能保证原子性操作,也没有像Mysql那样执行事务失败会进行回滚操作
Redis 事务执行流程?
答案:通过MULTI、EXEC、WATCH等命令来实现事务机制,事务执行过程将一系列多个命令按照顺序一次性执行,在执行期间,事务不会被中断,也不会去执行客户端的其他请求,直到所有命令执行完毕。
具体过程:
MULTI开始QUEUED,反之则直接执行这
个命令EXEC命令时,才会将队列里的命令取出、顺序执行,执行完将当前状态从事务状态改为非事务状态DISCARD 命令,放弃执行队列中的命令,可以理解为Mysql的回滚操作,并且将当前的状态从事务状态改为非事务状态WATCH 监视某个key,该命令只能在MULTI命令之前执行。如果监视的key被其他客户端修改,EXEC将会放弃执行队列中的所有命令。UNWATCH 取消监视之前通过WATCH 命令监视的key。通过执行EXEC 、DISCARD 两个命令之前监视的key也会被取消监视。
Redis 与 Guava 、Caffeine 有什么区别?
答案:缓存分为本地缓存和分布式缓存。
1、Caffeine、Guava,属于本地缓存,特点:
所以,本地缓存适合存储一些不易改变或者低频改变的高热点数据。
2、Redis属于分布式缓存,特点:
如何实现一个分布式锁?
答案:

推荐阅读
MYSQL 那点破事!索引、SQL调优、事务、B+树、分表 ....
原文作者:微观技术;如有侵权,请联系管理员删除。