您的位置:首页 > 数据库 > Memcache

拉勾网《32个Java面试必考点》学习笔记之十------缓存(Redis与Memcache)

2019-03-13 15:07 1141 查看

本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容

缓存

  • Redis数据结构
  • 缓存常见问题
  • 面试考察点
  • 加分项
  • 真题汇总
  • 知识点汇总

    缓存是高并发场景下,提升热点数据访问性能的手段

    知识点详解

    MC的内存结构

    Redis

    功能

    bitmap
    支持按位存取信息,可用于实现bloomfilter
    hyperLogLog
    提供不精确的去重统计功能,适合用作大规模数据的去重统计
    geospatial
    可用于保存地理位置,并作位置距离计算或根据半径计算位置等
    Sub/Pub
    订阅发布功能,可用于简单的消息队列
    pipeline
    可批量执行一组指令,一次性返回全部结果,另一种方式是使用脚本
    事务功能是串行执行,但失败不会回滚

    持久化

    • RDB 将数据集以快照形式写入磁盘,通过fork子进程执行,采用二进制压缩存储
    • redis数据保存在单一文件中,适合用作灾害备份,但是在快照写入磁盘之前宕机会丢失数据,保存快照时会时服务停顿
  • AOF
      以文本日志的形式,记录redis的每一个操作
    • 有灵活以保持同步(每秒,每次操作,不同步)
    • 磁盘文件与RDB方式比大,效率低于RDB

    淘汰策略

    voltile-
    对设置的生存时间的key进行lru,最小生存时间,随机剔除
    allkeys-
    则是对所有key
    no-eviction
    则是不进行剔除,读取正常,写入则会报异常

    Redis数据结构

    • list
      linkedlist
      ziplist
      实现
      ziplist
      存储在连续位置上,存储效率高,不利于修改操作,适用于数据较少的情况
    • linkedlist
      再插入节点上复杂度低,但内存开销大,节点地址不连续,容易产生内存碎片
    • 3.2后增加了
      quicklist
      ,其本身是双向无环链表,每个节点是ziplist
  • hash
    ziplist
    hashtable
    实现
      hash
      中的K/V字符串长度小于64B且hash长度小于512时使用
      ziplist
      ,超过时使用
      hashtable
  • set
    hashtable
    intset
      当set中的值都为数值且set长度小于512时使用
      intset
      ,超过则使用
      hashtable
  • zset
    ziplist
    skiplist
    实现
      zset
      中元素长度小于64B且
      zset
      长度小于128时使用
      ziplist
      ,超过时会使用
      skiplist

    redis内存分配采用jemalloc,将内存划分为small,large,huge三个范围,并在其中划分了不同大小的内存块,存储数据时选择大小合适的内存块进行存储,有利于减小内存碎片

    缓存常见问题

    缓存问题 产生原因 解决方案
    缓存方式 数据变更,缓存时效性 同步更新,失效更新,异步更新,定时更新
    缓存不一致 同步更新失败,异步更新 增加重试,补偿任务,最终一致
    缓存穿透 恶意攻击 空对象缓存,bloomfilter过滤器
    缓存击穿 热点key失效 互斥更新,随机退避,差异失效时间
    缓存雪崩 缓存宕机 快速失败熔断,主从模式,集群模式

    面试考察点

    • 了解缓存的使用场景,不同类型缓存的使用方式 对db热点数据进行缓存能减轻db压力,对热点服务进行缓存能提高服务并发性能
    • 单纯的K/V缓存场景可以使用MC,需要缓存特殊数据结构时可以使用Redis
    • 如,缓存视频播放列表可以使用redis的list缓存,计算排行榜数据时可以使用zset
  • 掌握MC和Redis的常用命令
  • 了解MC和Redis在内存中的存储结构
  • 了解MC和Redis得数据失效方式和提出策略
      如主动触发的定期删除,延迟触发的延期删除
  • 了解Redis的持久化,主从同步与cluster部署的原理
      如RDB与AOF的实现方式与区别

    加分项

    • 结合实际应用场景来介绍缓存的使用 如调用后端服务接口获取信息时,可使用本地+远程的多级缓存
  • 有过分布式缓存设计和应用经验
  • 了解缓存使用中可能出现的问题
  • 知道Redis的典型应用场景
  • 知道Redis的新特新
      5.0stream相较Sub/Pub功能可将未消费的信息进行缓存类似(kafka)

    真题汇总

    • Redis和Memcache有什么区别,该如何选择?
    • 你用到那些Redis的数据结构,在什么场景下?
    • Redis有哪些持久化方式,有什么区别?
    • Redis的失效机制是怎样的,Redis有哪些淘汰策略?
    • 如何保证Redi的高并发和高可用? [ul] 高并发:主从读写分离,多从库,多端口实例以及cluster集群部署
    • 高可用:sentinel保证主库宕机时,重新选住并完成从库的变更
  • 如何使用Redis实现延时队列,如何使用Redis实现分布式锁?
      可使用sortedset实现延迟队列,使用时间戳做score,使用zrange by score命令获取指定延迟时间之前的数据.
    • 可是使用setnx设置key,返回1则获取锁成功,返回0则获取锁失败
    [/ul]
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: