redis面试知识点

总结

  • 缓存数据库
  • memcache redis
  • 多路io复用
  • 常用数据类型
  • 分布式锁
  • 异步队列、
  • 海量数据固定前缀第key
  • 持久化
    • aof
    • rdb
    • 混合
  • redis主从架构

加一个缓存层 在客户和存储

缓存穿透 和 熔断

memcache 代码层次类似hash

  • 支持简单数据类型
  • 不支持数据持久化
  • 不支持分片
  • 不支持主从

redis

  • 数据类型丰富
  • 数据持久化存储
  • 主从
  • 分片

10w qps

为什么这么快

  • 基于内存 执行效率较高
  • 数据结构简单 操作简单 kv 数据键值对
  • 单线程 高并发 多核可以启动多实例 避免锁和线程切换
  • io多路复用 非阻塞io

FD文件描述符

传统io阻塞模型 阻塞模型 多客户端效率差

slect系统调用

监听文件可读可写

多路复用函数epoll kquene evport select

  • 因地制宜
  • 时间复杂度oO1的函数
  • select 作为保底方案
  • react设计模式监听io事件

常用数据类型

  • string 二进制安全
  • hash String 字典 储存对象
  • LIst 顺序插入排序
  • Set 集
  • Sorted Set 分数排序的set
  • 计数Hyperloglog
  • 支持存储地理位置geo

底层数据类型

  • 简单动态字符串
  • 链表
  • 字典
  • 跳表
  • 整数集合
  • 压缩列表
  • 对象

海量key里查询某一个固定前缀的key

  • 数据规模 问清楚边界

Keys pattern 查找所有符合给定模式的Key

KEYS一次返回所有key

数量过大,卡吨

SCAN cursor MATCH pattern COUNT count

  • 基于游标的迭代器,基于上一次游标延续之前的迭代
  • 0代表新的迭代
  • 不保证每次返回给出给定数量的元素,支持模糊查询

redis实现分布式锁

  • 分布式锁需要解决的问题
    • 互斥
    • 安全性
    • 死锁
    • 容错

SETNX key value 如果不存在,创造并且赋值

  • O(1)
  • 返回值,成功1失败0

setnx 长期有效

expire key seconds key生成时间

expire locknx 2

setnx locknx task

set key value ex seconds px milllseconds nx|xx

大量key过期时间集中 短暂卡顿,过期加一个随机值

redis 异步队列

  • rpush lpop消费数据
  • 缺点 没有等待队列有值就消费
  • 解决 sleep

BLPOP key 没有消息阻塞

pub/sub

主题订阅者模式

  • 发送者
  • 消费者

消息发布无状态 不保证可达

redis持久化

  • RDB 快照 保存时间点全部数据快照
  • `SAVE阻塞进程 ,直到所有文件创建
  • BGSAVE fork一个子进程来创建RDB文件,不阻塞服务器进程

自动触发持久化RDB

  • 根据conf配置定时触发
  • 主动复制时候主节点自动触发
  • Debug Reload
  • Shutdown 且没有开启AOF持久化

BGSAVE 原理

  • fork 写时复制

AOF 持久化 保存写状态

  • 记录除了查询以外所有变更数据库状态的命令
  • append 形式追加保存

AOF持久化

日志重写解决AOF文件大小不断增大的问题

  • fork 创建子进程
  • 子进程把新的AOF写到临时文件里面,不依赖原来AOF
  • 主进程持续把新的变动写到内存混合原来AOF中
  • 主进程获取子进程重写AOF完成信号,往新的AOF里面同步增量变动
  • 使用新的AOF文件替换旧的AOF文件

redis数据恢复

  • 共存恢复

RDB AOF

  • RDB内存快照 文件小 恢复快
  • 无法保存快照后的数据
  • AOF可读性高,保存增量数据,数据不易丢失
  • 缺点 体积打,恢复时间长

混合持久化方式

  • BGSAVE全量持久化
  • AOF增量持久化

pipeline好处

  • 类似管道

请求相应模型,每个请求处理需要应答

批量执行指令,节省多次io往返时间

顺序依赖指令分批发送

  • redis同步机制

主从同步原理

  • slave 发送sync 到master
  • master 启动后台进程,redis快照恢复到文件
  • master保存数据快照期间收到的写命令缓存起来
  • master将完成文件写操作后,将该文件发送给slave
  • 使用新的aof文件替换旧的aof文件
  • master将这期间收集的增量写命令发送salve端

增量同步过程

  • master接收到用户操作指令,判断是否需要传播到slave
  • 操作记录追加到aof文件
  • 操作传播到其他slave 1,对齐主动库 响应缓存写入指令
  • 换粗中的数据发送给slava

redis sentinel

主从切换

  • 监控 检查主从服务器是否运行正常
  • 提醒:通过api向管理员或者其他应用程序发送故障通知
  • 自动故障迁移

流言协议Gossip

  • 杂乱五章找到一致
    • 节点随机和其他通信。最后所有节点状态一致
    • 章哦好嗯子节点随机向其他节点列表需要传播的消息
    • 不保证信息一定会传递给所有节点,但是最终会趋向于一致

redis集群

  • 海量数据快速找到所需要的
    • 分片 按照某种规则去划分数据,分散存储在多个节点上
    • 常规哈系无法实现节点动态增减

一致性哈系算法 对2^32取摸 hash模拟成一个圆环

数据key使用同样的hash计算哈系

数据倾斜

加入虚拟节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值