Redis篇(面试)
本文最后更新于91 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

你的项目场景中哪些地方用到了redis?

缓存

缓存穿透

方案一

数据库有这个数据了,但是redis没更新,导致不一致。

方案二(布隆过滤器)

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

上面这句介绍比较全面的描述了什么是布隆过滤器,如果还是不太好理解的话,就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素。由于本文讲述布隆过滤器时会结合Redis来讲解,因此类比为Redis中的Set数据结构会比较好理解,而且Redis中的布隆过滤器使用的指令与Set集合非常类似(后续会讲到)。

学习布隆过滤器之前有必要先聊下它的优缺点,因为好的东西我们才想要嘛!
布隆过滤器的优点:

时间复杂度低,增加和查询元素的时间复杂为O(N),(N为哈希函数的个数,通常情况比较小)
保密性强,布隆过滤器不存储元素本身
存储空间小,如果允许存在一定的误判,布隆过滤器是非常节省空间的(相比其他数据结构如Set集合)
布隆过滤器的缺点:

有点一定的误判率,但是可以通过调整参数来降低
无法获取元素本身
很难删除元素

布隆过滤器它实际上是一个很长的二进制向量和一系列随机映射函数。以Redis中的布隆过滤器实现为例,Redis中的布隆过滤器底层是一个大型位数组(二进制数组)+多个无偏hash函数。

误判图解

缓存击穿

处理的时候redis也有大量分表什么要处理,时间不会很快,还是会压垮数据库

互斥锁
需要强一致的任务,比如跟钱相关

逻辑过期(对于热点的key可以设置永不过期的key)

加强用户体验的互联网服务,不保证数据绝对一致

缓存雪崩

缓存三兄弟打油诗

双写一致性

延迟双删(对于一致性要求高的)

先删除缓存,再修改数据库所导致的问题
情况一不会产生问题
情况二会产生问题
先操作数据库再删除缓存
情况一不会产生问题
情况二会产生问题

读写锁(强一致,性能低)

一致性要求低的

持久化(RDB、AOF)

RDB

RDB执行原理

AOF

总结

数据过期策略

过期删除

定期删除

数据淘汰策略

各个策略

使用建议

分布式锁

没有锁产生的问题

Redis集群方案

主从复制、

哨兵模式(Sentinel)

哨兵服务状态监控

脑裂

网络出现了问题的情况下,哨兵跟master断开链接,但master并没有挂,但哨兵机制启动将一个slave提升为master的现象就是脑裂

网络恢复后,哨兵会将本来的master强制降为slave,从后面的master中同步数据,将自己的数据清空,将自己之前写的内容也清空了,造成数据的丢失。

脑裂如何解决?

分片集群

数据读写

Redis是单线程的为什么那么快?

用户空间和内核空间

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇