美文网首页
redis 面试题

redis 面试题

作者: gstsyyb | 来源:发表于2020-05-28 19:01 被阅读0次

    技巧:
    1、redis + lua 解决高并发场景下的写操作
    2、redis 分布式锁,防止并发写
    3、redis 队列、排序集合实现一些特殊场景下的需求
    4、缓存预热

    一、基础面试题
    0、你们是怎么使用 redis的 ?
    使用场景:
    1、使用 string、hash、set 等结构来缓存,降低 DB 压力,非常常用的场景
    2、使用 list 做队列、sort set 实现排名、延迟队列、抽奖,一些特殊场景处理方案
    3、使用 redis + lua + mq 解决高并发下的写操作(比如扣减库存等),通用高并发处理方案
    1、为什么不适应 java 来进行缓存,而使用 redis ?
    思考:
    1、如何分配内存,怎么设计数据结构,设计哪些数据结构
    2、如何回收过期的 key
    3、如何保证宕机后缓存数据丢失
    4、如何做集群、高可用、单节点内存限制
    5、事务如何做、有什么缺点,采用什么方式去弥补这个缺点
    2、redis 为什么占用内存少、持久化方式?
    思考:1、对于不同场景,设计不同数据结构,比如list,小数据量可用压缩列表的,大数据量可以基于 linkedlist

    2、rdb(默认) + aof,其中rdb是内存快照,断电时有少量数据丢失,如果同时开启默认使用 aof 恢复数据,速度慢。
    3、redis是单线程吗?
    思考:1、redis 命令执行是一个线程顺序执行的,一编程简单,二无需线程切换加锁,redis命令都是顺序执行(非常好的特性)
    4、redis 的事务使用过,有什么缺点吗?
    思考:1、事务要么全部执行,而 redis 事务仅是顺序执行,如何弥补这个缺点就是采用 redis + lua
    5、redis 的数据清楚策略是什么,怎么权衡的?
    1、定期 + 惰性
    2、基于内存大小做些回收(随机抽检一批进行回收)
    6、使用了哪些redis场景?
    1、缓存
    2、redis消息队列 + sort set (实现类似延迟队列、抽奖)
    3、事务消息
    4、redis + lua (解决高并发下的写操作)
    7、集群
    1、master - slave集群
    1、为什么出现这种集群机制,目的就是保证数据存储多份,防止单节点故障
    2、全量复制 + 增量复制(复制积压缓冲区)
    2、为什么提出高可用集群,具体是什么背景
    1、slave 宕机时,实现自动提升 slave 为 master,实现故障自动转移,否则需要人工切换,其实自动处理是一个非常危险的过程
    3、为什么会提出 redis 分布式集群,解决了什么问题,有什么缺点、客户端怎么查询
    1、解决单节点内存大小瓶颈,数据分散到多节点
    2、缺点就是一些批量的命令 mget 等可能受限
    3、客户端记录一张类似路由表的东西,实现数据访问,如果服务端无数据进行重定向到客户端,客户端重新获取
    8、如何解决缓存一致性
    1、通常都是数据更新后,删除缓存,重建缓存代价比较高(业务逻辑复杂)
    9、缓存穿透、击穿、雪崩
    1、穿透可以通过防重或布隆过滤器实现、其次可以设置一个特殊值,较短的过期时间
    2、击穿可以采用加锁更新缓存的方式处理,防止请求数据库更新缓存
    3、雪崩通过将过期时间设置不一样,通过是 expire = 固定过期时间 + 随机数,保证key 不集体失效
    二、高级面试题
    1、使用 redis 遇到了什么问题
    1、redis 集群隔离使用,防止某一业务场景操作 redis 异常影响其他业务,大量 key导致redis 报警
    2、redis操作时注意 try-catch,防止 redis 异常影响核心业务
    3、注意一些非常危险的 redis 命令,比如keys * 等耗时长的命令,(redis是单线程的,一旦出现就会影响线上)

    2、redis 分布式锁和 zookeeper 分布式锁如何选择
    1、redis 基于 sexnx 实现,性能较高,缺点是集群复制可能有延迟可导致加锁异常。
    1、redisson通过在多个节点加锁来处理这种问题
    2、分布式锁的续约,防止业务未执行完释放锁
    2、zookeeper高可用集群
    1、羊群效应
    2、zookeeper 适合读多写少的场景,写代价过高(写时要求一般以上的节点写入成功,导致集群的规模不能无限增多)
    3、相对 redis 是一个高可用锁,但是性能比较差
    所以一般采用 redis 实现分布式锁。
    4、大 key、value 问题
    1、分桶,可以采用 hash分桶实现

    相关文章

      网友评论

          本文标题:redis 面试题

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