美文网首页面试
Redis面试篇

Redis面试篇

作者: SkylerSkr | 来源:发表于2020-11-18 23:23 被阅读0次

    前言

    准备开一个新的系列,总结一些面试里吹牛皮的地方,不涉及太多细节,但是方方面面的都吹会起来。
    这篇文章主要写Redis的方方面面。

    基础结构

    1.String会预分配空间,就像java的ArrayList,1MB以下每次扩容空间翻倍,1MB以上每次加1MB,最大512MB
    2.List在列表元素少时,使用ZipList(双向指针,空间连续性,扫描磁盘更快)
    3.Hash对象在扩容的时候,会创建一个新Hash对象,使用渐进式复制,用到哪个字段了再把这个字段的值赋值到新对象
    4.Zset使用跳表来做排序

    复合结构

    1.位图结构,位图最小的单位是bit,每个bit是由0或1构成
    2.GeoHash结构(坐标),用Zset实现,Score用经纬度+base32
    3.HyperLogLog去重记数,有误差1%,12KB的大小,例如:记录某个页面有多少人访问过(会重复访问)
    4.BloomFilter(布隆过滤器),用位数组(二进制)实现,判断某个值一定存在或一定不存在,一个key对应几位,只要几位都是1就是存在

    Redis附加功能

    1.Pipeline,把多条消息捏在一起发送给Redis服务器,客户端提供的功能
    2.scan、hscan、sscan可以对String、Hash、Set进行分页模糊匹配
    3.Redis漏油桶机制,Redis Cell
    4.分布式锁,setnx(存在就设置返回1,否则返回0),返回1代表坑位被占领了,拿到锁
    5.消息队列

    • 用List结构,实现简单的生产消费者
    • 发布订阅模式subscribe订阅,publish推送,psubscribe模糊订阅
      没有Ack确认机制
      消息没办法持久化,如果Redis宕机了,消息就找不回来了

    Redis吹牛PLUS

    1.Redis缓存穿透、雪崩、击穿(这个自己百度啦,都说烂了)
    2.Redis有自己的通讯协议,RESP(Redis Serialization Protocol)
    3.Redisserver默认有16个数据库,每一个数据库下有两个数组,dict数组保存键的值,expires数组保存键的过期时间
    4.Redis多线程,Redis6.0之后支持多线程,Redis主线程是单线程的,但是IO是多线程的,会维护一个指令队列,先到先服务
    5.过期键

    • 清理过期键的方式:定时清理,惰性清理(用的时候才会判断是否过期),定期清理(结合前两种,一次清理一定量的key)
    • 过期键不会写入RDB文件和AOF文件。过期键被删除时,会追加一条DEL命令到AOF文件
    • 主服务器里删除过期键,会给每个节点发送一个DEL指令。从服务器删除过期键,等主服务器发DEL指令。

    相关文章

      网友评论

        本文标题:Redis面试篇

        本文链接:https://www.haomeiwen.com/subject/gnmzbktx.html