Redis 是一款开源的内存数据库,具有高性能、丰富的数据结构、多样的持久化机制和分布式特性,在缓存、消息队列、分布式锁等场景中广泛应用。下面总结 Redis 常见的八股文知识点,包括其核心特性、常见数据结构、持久化、事务、主从复制、集群模式、淘汰策略以及高可用性等。

  1. Redis 核心特性
    高性能:Redis 的数据都存储在内存中,并采用单线程模型,操作通常只需微秒级的时间。
    多数据结构支持:提供字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)、位图(Bitmap)等多种数据类型,便于实现多种应用场景。
    持久化支持:支持 RDB 和 AOF 两种持久化方式,确保数据在宕机时不丢失。
    分布式特性:支持主从复制和 Redis Cluster 模式,可以实现数据分片和高可用。
  2. 数据结构和应用场景
    String:字符串类型,支持存储简单字符串、数字、序列化对象。常用于缓存对象、计数器等。
    List:双向链表结构,支持从头部和尾部插入数据。适合消息队列、任务列表等场景。
    Set:无序集合,不允许重复元素,支持交集、并集和差集。适合社交应用中的共同好友、标签等。
    Sorted Set:有序集合,每个元素带有一个分数,用于排序。适合排行榜、按权重排序的数据等场景。
    Hash:哈希表结构,适合存储对象或用户信息等结构化数据。
    Bitmap:位数组,可以实现高效的二进制数据存储和操作。适合实现布隆过滤器和用户签到等场景。
  3. 持久化机制
    RDB(Redis Database):定期快照方式,在指定间隔时间内保存数据快照。适合备份和灾备,但可能丢失部分数据。
    AOF(Append Only File):将每次写操作追加到日志文件中,可以选择不同的同步策略,数据安全性更高。缺点是文件较大,恢复速度较慢。
    RDB+AOF:可以混合使用 RDB 和 AOF,以在数据持久化与性能之间进行平衡。
  4. 事务
    Redis 支持简单的事务操作,包含以下命令:

MULTI:开启事务。
EXEC:执行事务内的所有命令。
DISCARD:取消事务。
WATCH:监控指定的键,如果监控的键在执行事务之前被修改,事务将失败,适合实现乐观锁。
Redis 的事务不支持回滚机制,但它能保证事务中的命令要么全部执行,要么全部不执行。

  1. 主从复制
    基本原理:通过主从复制机制将主节点的数据复制到从节点,实现数据冗余。
    异步复制:Redis 的复制是异步的,从节点不会阻塞主节点写操作。
    读写分离:主节点负责写,从节点负责读,提高读写性能。
    故障恢复:当主节点宕机时,从节点可以提升为主节点,提高系统可用性。
  2. Redis 集群模式
    数据分片:通过一致性哈希或哈希槽(Cluster Slots)将数据分布到不同节点,默认 16384 个槽。
    集群节点:每个节点保存一部分槽,Redis Cluster 自动管理数据的分布和重平衡。
    高可用性:支持主从复制和故障转移,确保集群的容错能力。
  3. 淘汰策略
    Redis 提供多种数据淘汰策略,确保在内存不足时能够合理释放数据。常见策略包括:

noeviction:内存不足时返回错误,不会驱逐数据。
allkeys-lru:所有键中,采用 LRU(最近最少使用)算法淘汰数据。
volatile-lru:只对设置了过期时间的键采用 LRU 算法淘汰。
allkeys-random:所有键中,随机淘汰数据。
volatile-random:只对设置了过期时间的键随机淘汰数据。
volatile-ttl:只对设置了过期时间的键,淘汰 TTL(剩余存活时间)最短的键。
8. 高可用性
哨兵模式(Sentinel):通过哨兵监控主从节点的状态,并在主节点故障时自动将从节点提升为主节点,实现故障恢复。
Redis Cluster:集群模式支持数据分片和自动故障转移,适合大型分布式应用。
9. 常见问题和优化
持久化文件过大:可以选择合适的 AOF 策略,定期对日志文件进行重写(BGREWRITEAOF)。
内存不足:合理设置 Redis 的内存上限(maxmemory),并选择合适的淘汰策略。
阻塞操作:尽量避免使用 KEYS 等可能阻塞 Redis 的操作,建议使用 SCAN 等非阻塞命令。
网络延迟:部署时可以通过使用内网通信、压缩数据等方式减少网络延迟。
Redis 是一个功能丰富、高效、灵活的数据库系统,凭借其多样的数据结构和强大的分布式支持,能够在很多高性能场景下提供优质的解决方案。掌握这些知识点,可以帮助在面试和实际应用中更好地理解和使用 Redis。