Redis必会知识点总结

Redis必会知识点总结
最新回答
爲妳ヤ葑惢

2023-04-10 14:26:59

Redis必会知识点总结一、Redis简介
  • 定义:Redis是完全开源的,遵守BSD协议的高性能key-value数据库。
  • 核心特点

    数据持久化:支持将内存数据保存到磁盘,重启时可重新加载。

    丰富数据结构:支持String、List、Set、ZSet(有序集合)、Hash等。

    主从备份:支持Master-Slave模式的数据备份。

二、Redis优势
  • 高性能:读速度达110,000次/秒,写速度81,000次/秒。
  • 原子性操作:所有操作均为原子性,支持事务(多个操作原子执行)。
  • 丰富特性:支持发布/订阅、键过期通知、Lua脚本等。
  • 内存与持久化平衡:数据存储在内存中,但可通过持久化机制保存到磁盘。
三、Redis与其他Key-Value存储的区别
  • 复杂数据结构:提供对List、Set等结构的原子操作,无需额外抽象。
  • 内存操作优势:内存中操作复杂数据结构更高效,磁盘格式紧凑且以追加方式存储。
  • 权衡内存限制:数据量受硬件内存限制,需合理设计数据规模。
四、Redis常问面试题1. Redis支持的数据类型
  • String:二进制安全字符串,支持整数/浮点数运算。
  • List:双向链表,支持头部/尾部插入删除。
  • Set:无序集合,支持交并差运算。
  • ZSet(Sorted Set):有序集合,按分数排序,支持范围查询。
  • Hash:键值对集合,适合存储对象。
2. Redis持久化
  • 定义:将内存数据保存到磁盘,防止数据丢失。
  • 持久化方式

    RDB(快照)

    原理:定时生成数据快照,保存为二进制文件(如dump.rdb)。

    优点:恢复速度快,适合大规模数据备份。

    缺点:可能丢失最后一次快照后的数据。

    AOF(追加文件)

    原理:记录所有写操作命令,重启时重放命令恢复数据。

    优点:数据完整性高,支持三种同步策略(always/everysec/no)。

    缺点:文件体积大,恢复速度慢。

3. Redis架构模式
  • 单机模式:单节点部署,简单但无高可用性。
  • 主从复制(Master-Slave)

    特点:主节点负责写,从节点同步数据并支持读,实现读写分离。

    缺点:主节点故障时需手动切换。

  • 哨兵模式(Sentinel)

    特点:监控主从节点,自动故障转移,提升高可用性。

  • 集群模式(Cluster)

    特点:数据分片存储,支持水平扩展,自动处理节点故障。

4. Redis分布式锁实现
  • 实现方式:使用SETNX(SET if Not eXists)命令获取锁,结合过期时间防止死锁。
  • 示例:SET lock_key unique_value NX PX 30000 # 获取锁,30秒后过期DEL lock_key # 释放锁(需校验value防止误删)
  • 注意事项:需处理锁超时、锁续期等问题。
5. Redis异步队列实现与缺点
  • 实现方式

    List:使用LPUSH生产消息,BRPOP消费消息(阻塞式)。

    Pub/Sub:发布订阅模式,但消息无持久化,消费者离线会丢失消息。

  • 缺点

    List方式:消费者故障可能导致消息积压。

    Pub/Sub方式:不支持消息回溯。

6. 缓存穿透与避免方法
  • 定义:查询不存在的数据,导致请求直接穿透到数据库。
  • 避免方法

    布隆过滤器:预判键是否存在,过滤无效请求。

    缓存空值:将查询结果为空的键缓存为null,设置短过期时间。

7. 缓存雪崩与避免方法
  • 定义:大量缓存键同时过期,导致数据库压力激增。
  • 避免方法

    过期时间分散:为键设置随机过期时间(如基础时间+随机值)。

    多级缓存:使用本地缓存(如Caffeine)作为缓冲。

    限流降级:对数据库请求进行限流。

8. Redis常用命令
  • String:SET、GET、INCR、DECR。
  • List:LPUSH、RPOP、LRANGE。
  • Set:SADD、SMEMBERS、SINTER。
  • ZSet:ZADD、ZRANGEBYSCORE、ZREVRANK。
  • Hash:HSET、HGET、HGETALL。
  • 通用:EXPIRE、TTL、DEL、KEYS(生产环境慎用)。
9. Redis单线程为何高并发
  • 原因

    纯内存操作:避免磁盘I/O瓶颈。

    非阻塞I/O:基于多路复用(epoll/kqueue)实现高并发连接。

    单线程避免锁竞争:无上下文切换开销。

10. Redis内存淘汰策略
  • 策略类型

    volatile-lru:淘汰最近最少使用的过期键。

    allkeys-lru:淘汰所有键中最近最少使用的。

    volatile-ttl:淘汰即将过期的键。

    noeviction:不淘汰,写操作返回错误(默认策略)。

11. Redis并发竞争问题解决
  • 解决方案

    乐观锁:使用WATCH监控键,事务中校验版本。

    分布式锁:通过SETNX实现互斥访问。

    Lua脚本:原子化执行多个操作,避免竞态条件。

五、补充面试题(需查阅资料)
  • Redis如何实现分布式限流
  • Redis集群数据分片原理