拉勾网《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数据保存在单一文件中,适合用作灾害备份,但是在快照写入磁盘之前宕机会丢失数据,保存快照时会时服务停顿
-
以文本日志的形式,记录redis的每一个操作
淘汰策略
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
-
如主动触发的定期删除,延迟触发的延期删除
-
如RDB与AOF的实现方式与区别
加分项
- 结合实际应用场景来介绍缓存的使用 如调用后端服务接口获取信息时,可使用本地+远程的多级缓存
-
5.0stream相较Sub/Pub功能可将未消费的信息进行缓存类似(kafka)
真题汇总
- Redis和Memcache有什么区别,该如何选择?
- 你用到那些Redis的数据结构,在什么场景下?
- Redis有哪些持久化方式,有什么区别?
- Redis的失效机制是怎样的,Redis有哪些淘汰策略?
- 如何保证Redi的高并发和高可用? [ul] 高并发:主从读写分离,多从库,多端口实例以及cluster集群部署
- 高可用:sentinel保证主库宕机时,重新选住并完成从库的变更
-
可使用sortedset实现延迟队列,使用时间戳做score,使用zrange by score命令获取指定延迟时间之前的数据.
相关文章推荐
- 拉勾网《32个Java面试必考点》学习笔记之十二------架构演进与容器技术
- memcache/redis 缓存学习笔记
- 学习笔记-JAVA-final关键字考点
- 黑马程序员—24—java面试:有关银行调度学习笔记和学习心得体会
- PHP 开发 APP 接口 学习笔记与总结 - Redis 缓存
- Redis学习笔记3 Java + Redis模拟秒杀场景
- JavaWeb_Day10_学习笔记1_response(3、4、5、6、7、8、9)发送状态码、响应、重定向、定时刷新、禁用浏览器缓存、响应字节数据、快捷重定向方法、完成防盗链
- Java学习笔记(61)-----------40个Java集合面试问题和答案
- Redis学习笔记之二 :在Java项目中使用Redis
- GAE中Memcache缓存学习笔记
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- Redis 学习笔记六 Java使用redis(测试环境:Win7)
- python学习笔记 ---线程、进程、协程、队列、python-memcache、python-redis
- JAVA之 Redis 学习笔记(二) Redis的连接IP、端口号、连接密码的修改以及与JAVA简单交互
- 从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透
- java程序员面试必备的32个考点
- [Java面试] java程序员面试必备的32个考点
- 学习笔记 - java Integer包装类的缓存机制
- Java学习笔记-笔试考点
- Java面试知识学习笔记2(2016/3/8)