redis常见面试题及答案

1. redis单线程快的原因?

  • 内存操作
  • 非阻塞IO多路复用机制
  • 避免了cpu频繁上下文切换

2. redis持久化

  • rdb:某个时刻的内存快照,以二进制的方式写入磁盘。触发:save命令,使得redis处于阻塞状态,直到rdb持久化完成。bgsave命令,fork出子进程,copy on write。自动触发 save m n。

    • 优点:
      • 只包含一个dump.rdb,方便持久化
      • 容灾好,方便备份
      • 性能最大化,fork子进程完成写操作,主进程处理命令
      • 比aop启动效率高
    • 缺点:
      • 安全性低
      • fork子进程占用cpu
  • AOF:以日志的形式记录服务器所处理的每一个写,删除操作,查询操作不会记录,以文本方式记录,首先放置到缓冲区,后续根据不同同步策略,调用操作系统命令进程刷盘。 
    • 策略:每秒同步,每个命令同步,不同步(交给os控制,redis不做改动)
    • 优点:
      • 数据安全
      • append方式写文件
      • rewrite模式定期重写,以达到压缩的目的
    • 缺点
      • AOF文件大,恢复慢
      • 启动慢
      • 运行效率低

3. redis主从同步机制

  1. 从节点执行slave of master port,选择要连接的主节点ip和端口
  2. 从节点存在一个定时任务,定时发现主节点信息,向主节点发送信号,与主节点建立socket连接
  3. 主节点返回数据,完成通信连接
  4. 主节点首先将全量数据发送给从节点,完成数据同步,此后,将增量数据同步给从节点,保证数据一致性。

uid, 缓冲队列,offset

4. 说一下你知道的redis高可用方案

针对的问题:单点故障,吞吐量,存储

主从模式:没法自动切换主节点

哨兵模式:

  • 功能:集群节点监控,消息通知,故障转移(切换主节点),配置中心(给从节点重写分配·主节点ip,port)
  • 保障了服务高可用,不一定高可靠

集群模式:

  •  redis sharding: 由redis客户端决定key存放在哪台实例上面
  • redis cluster: 服务端sharding技术,采用slot技术(CRC16(key) mod 16384确定槽区间,不同区间对应不同节点),然后将请求发送到节点

5. redis事务实现

命令:watch, unwatch, multi, exec, discard

  • 事务开始:执行multi命令,开启一个事务, 客户端中flags的状态变更为redis_multi
  • 命令入队:multi, exec, watch, discard命令,服务端立刻执行,除了multi, exec, watch, discard命令外,服务端要求客户端将其它所有命令放置到事务队列中,随后检查此命令格式是否正确,不正确则结束事务,关闭redis_multi状态,向客户端返回错误信息,正确的话,向客户端返回queue。
  • 事务执行:服务端收到exec命令,检查客户端是否处于事务状态redis_multi,或是redis_dirty_cas或是redis_dirty_exec,是的话,取消事务的执行;否则遍历事务队列,执行所有命令,再将结果返回给客户端。

6. redis分布式锁实现

        setnx + setex  --->   set(key, value, nx, px)

        常见问题及解决方式:

  • 任务超时,持有锁的线程还在同步代码区,锁就过期了,导致并发,使用redisson
  • 不可重入,使用redisson解决,实现类似于AQS
  • 数据异步复制造成锁丢失,使用redLock(顺序向5个节点请求枷锁,请求超时则跳过该节点,3个节点加锁成功且花费时间小于锁的有效期)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值