redis面试八股文

1.redis中rehash操作
hashmap中的rehash操作:当添加一个元素,达到了阈值,启动rehash操作,直接申请一个大于原先旧数组俩倍大小的新数组。比如原先是4,则申请8;原先是7,则申请16 。必须是2的整数次幂。
然后遍历原先旧数组,重新在新数组计算一下hash。存在的问题就是,在rehash的时候此时是不能进行新的操作的,会变成阻塞状态,如果需要迁移的数据量大,则很容易变得不可用。
redis中采用的rehash操作是渐进式的。redis底层维护俩个数组ht[0],ht[1];rehashiidx 等于-1,表示未进行rehash操作,否则表示正在进行rehash操作。在 每次crud的时候,会把rehashidx指向的索引上面的所有元素都重新计算hash然后迁移到新数组,直到原数组的元素全部迁移完成,交换俩个数组的指针,数组2号置为null。
2.redis的持久化策略
   aof和rdb
   aof是记录命令的方式,命令执行完然后增量的方式写日志,如果最后记录的文件大会存在重写的方式,把几条日志合并到一起。
   三种写回策略:(一般使用2,秒级丢失)
  1. always,同步写回,每个子命令执行完,都立即将日志写回磁盘。

  2. everysec,每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。

  3. no:只是先把日志写到AOF内存缓冲区,有操作系统去决定何时写入磁盘。
   rdb是快照的方式,保存当前时刻数据库中的数据。优点是宕机后能快速恢复,但是是分钟级的数据丢失。
   使用save和bgsave命令,前者是同步的,会阻塞当前线程;后者是异步的,重新fork一个新线程执行操作。

全部评论
感谢大神的面试八股文分享🤗
点赞 回复 分享
发布于 2022-08-07 16:41

相关推荐

点赞 评论 收藏
分享
评论
1
12
分享

创作者周榜

更多
牛客网
牛客企业服务