Redis 面试准备

Redis 能做什么 / 对 Redis 的理解 / 应用场景

Redis 是 key-value 型的内存数据库, 读写性能强大, 每秒可以处理超过 10 万次读写操作.
支持事务,Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。
数据结构丰富,除了支持 string 类型的 value 外还支持 hash、set、zset、list 等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
Redis 遵循键值结构,而 RDBMS 遵循表结构。

最常用的应用场景是作为缓存中间件:

  1. 排行榜 SortSet
  2. API 的计算器, 限速器
  3. 利用集合方法求共同好友等
  4. 简单的消息队列
  5. 共享 Session / JWT 等

Redis 的局限性

  1. 持久化方案不能保证数据绝对的落地, 频繁的持久化会增大 Redis 服务的压力
  2. 适合低数据量/访问频繁的业务

noSQL 数据库遵循 CAP

CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。

基础内容

  1. 键的类型只能为字符串,值常见有五种数据类型:字符串、列表、集合、散列表、有序集合。
    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
    string类型是Redis最基本的数据类型,一个键最大能存储512MB。
    每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?

  1. Redis 提供了两种持久化方式:RDB(默认) 和AOF
    [https://juejin.cn/post/6926039904590037005]
    RDB: 类似 MySQL Dump,核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
    AOF:记录服务器接收的每个写操作,这些操作将在服务器启动时再次执行,以重建原始数据集。

RDB 的优点:

  1. 生成多个数据文件, 每个文件代表某个时刻的 Redis 中的所有数据, 适合冷备份.
  2. 完整的数据文件, 重启恢复更快速

RDB 的缺点:

  1. 耗时 O(n)
  2. 单独 fork() 的子进程会消耗内存, 当数据文件特别大的时候, 可能影响主进程
  3. 不是高可用, 如果备份过程中 Redis 宕机, 则会丢失最近未持久化的数据

AOF 的优点:

  1. 备份间隔小, 丢失数据少
  2. append-only模式追加写, 所以没有任何磁盘寻址的开销,写入性能高,且文件不易破损,即使文件尾部破损,也易修复
  3. 适合灾难性误删除操作的紧急恢复

AOF 的缺点:

  1. 对于同一份数据,AOF日志一般比RDB快照更大
  2. 恢复时间长
  3. 复杂的备份和恢复机制的可能有 bug

Redis 的主从复制


Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。

特点:

1、master/slave 角色

2、master/slave 数据相同

3、降低 master 读压力

问题:

无法保证高可用

没有解决 master 写的压力

Redis 哨兵机制


Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移的机制.

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。高可用

缺点

  • 切换需要时间丢数据
  • 没有解决 master 写的压力

Redis 集群

  1. proxy 集群
    Proxy 集群需要维护 proxy 层,本身不能支持故障的自动转移可扩展性差.
  2. 直连集群 redis-cluster
    不存在哪个节点影响性能瓶颈,数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
    高可用性,部分节点不可用时,集群仍可用.
    故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master 的角色提升。
    缺点:

1、资源隔离性较差,容易出现相互影响的情况。

2、数据通过异步复制,不保证数据的强一致性

缓存雪崩

缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。

posted @ 2023-05-15 11:06  Boiiea  阅读(25)  评论(0)    收藏  举报