没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
Redis 高频面试题及答案
目录
1、Redis 持久化机制 ........................................................................................................................................1
2、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 ................................................2
一、缓存雪崩 ..............................................................................................................................................2
二、缓存穿透 ..............................................................................................................................................3
三、缓存预热 ..............................................................................................................................................4
四、缓存更新 ..............................................................................................................................................5
五、缓存降级 ..............................................................................................................................................5
3、热点数据和冷数据是什么 .........................................................................................................................6
4、Memcache 与 Redis 的区别都有哪些? ...............................................................................................7
5、单线程的 redis 为什么这么快 ..................................................................................................................8
6、redis 的数据类型,以及每种数据类型的使用场景 ..........................................................................8
7、Redis 内部结构 .............................................................................................................................................9
8、Redis 为什么是单线程的 ....................................................................................................................... 11
9、Redis 集群方案应该怎么做?都有哪些方案? .............................................................................. 13
10、有没有尝试进行多机 redis 的部署?如何保证数据一致的? ................................................ 13
11、对于大量的请求怎么样处理 ............................................................................................................... 14
12、Redis 常见性能问题和解决方案? .................................................................................................. 14
13、讲解下 Redis 线程模型 ......................................................................................................................... 15
14、为什么 Redis 的操作是原子性的,怎么保证原子性的? ......................................................... 16
15、Redis 事务 .................................................................................................................................................. 17
16、Redis 实现分布式锁 ............................................................................................................................... 18
1、Redis 持久化机制
Redis 是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到
硬盘文件来保证数据持久化。当 Redis 重启后通过把硬盘文件重新加载到内存,
就能达到恢复数据的目的。
实现:单独创建 fork()一个子进程,将当前父进程的数据库数据复制到子进程的
内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时
更多JAVA视频资料:
https://pan.baidu.com/s/1brJVbjPK4kacncAsQtgrmA
提取码:1234
文件替换上次的快照文件,然后子进程退出,内存释放。
RDB 是 Redis 默认的持久化方式。按照一定的时间周期策略把内存的数据以快
照的形式保存到硬盘的二进制文件。即 Snapshot 快照存储,对应产生的数据文
件为 dump.rdb,通过配置文件中的 save 参数来定义快照的周期。( 快照可以
是其所表示的数据的一个副本,也可以是数据的一个复制品。)
AOF:Redis 会将每一个收到的写命令都通过 Write 函数追加到文件最后,类似
于 MySQL 的 binlog。当 Redis 重启是会通过重新执行文件中保存的写命令来
在内存中重建整个数据库的内容。
当两种方式同时开启时,数据恢复 Redis 会优先选择 AOF 恢复。
2、缓存雪崩、缓存穿透、缓存预热、缓存更
新、缓存降级等问题
一、缓存雪崩
我们可以简单的理解为:由于原有缓存失效,新缓存未到期间
(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存
过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库 CPU 和内
存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整
个系统崩溃。
解决办法:
更多JAVA视频资料:
https://pan.baidu.com/s/1brJVbjPK4kacncAsQtgrmA
提取码:1234
大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证
不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落
到底层存储系统上。还有一个简单方案就时讲缓存失效时间分散开。
二、缓存穿透
缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导
致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回
空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也
是经常提的缓存命中率问题。
解决办法;
最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的
bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底
层存储系统的查询压力。
另外也有一个更为简单粗暴的方法,如果一个查询返回的数据为空(不管是数据
不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会
很短,最长不超过五分钟。通过这个直接设置的默认值存放到缓存,这样第二次
到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。
5TB 的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是
一些 32bit 大小的数据该如何解决?如果是 64bit 的呢?
对于空间的利用到达了一种极致,那就是 Bitmap 和布隆过滤器(Bloom Filter)。
更多JAVA视频资料:
https://pan.baidu.com/s/1brJVbjPK4kacncAsQtgrmA
提取码:1234
Bitmap: 典型的就是哈希表
缺点是,Bitmap 对于每个元素只能记录 1bit 信息,如果还想完成额外的功能,
恐怕只能靠牺牲更多的空间、时间来完成了。
布隆过滤器(推荐)
就是引入了 k(k>1)k(k>1)个相互独立的哈希函数,保证在给定的空间、误判率
下,完成元素判重的过程。
它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别
率和删除困难。
Bloom-Filter 算法的核心思想就是利用多个不同的 Hash 函数来解决“冲突”。
Hash 存在一个冲突(碰撞)的问题,用同一个 Hash 得到的两个 URL 的值有可
能相同。为了减少冲突,我们可以多引入几个 Hash,如果通过其中的一个 Hash
值我们得出某元素不在集合中,那么该元素肯定不在集合中。只有在所有的 Hash
函数告诉我们该元素在集合中时,才能确定该元素存在于集合中。这便是
Bloom-Filter 的基本思想。
Bloom-Filter 一般用于在大数据量的集合中判定某元素是否存在。
三、缓存预热
缓存预热这个应该是一个比较常见的概念,相信很多小伙伴都应该可以很容易的
理解,缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样
就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户
更多JAVA视频资料:
https://pan.baidu.com/s/1brJVbjPK4kacncAsQtgrmA
提取码:1234
剩余17页未读,继续阅读
她说那里是晒黑的
- 粉丝: 111
- 资源: 91
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0