| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 细说Redis-p2(2022.03.20) -> 正文阅读 |
|
[大数据]细说Redis-p2(2022.03.20) |
上一章我们已经了解了redis是干嘛以及集群等功能以及细节。这一章我们来聊聊缓存的设计和使用redis需要注意的点以及过期数据处理的策略。 细说Redis-p21. 多级缓存的设计通常来说亿万级流量电商微服务架构如下 1.1 Ngnix层Ngnix是高性能的HTTP和反向代理web服务器,有不是很清楚的同学可以去看看我之前写的Nginx文章,能够让大家对Nginx有一个大致的了解。 1.2 EhCache层这里不对 EhCache做过多说明,不清楚的同学可以看看下面两篇帖子 1.3 Redis层Redis应该是我们作为缓存工具做常见的了,基本上来说就是为访问数据库最后一道拦截了。要知道磁盘和内存的读取速率大约差了4个数量级。都在内存中找要远远好过都在磁盘中找。 mysql的访问不再赘述 总结下:之所以采用这套架构就是为了提高服务的可用性以及尽可能的对读取速度提速 2. Redis的常见问题2.1 缓存击穿概念: 解决办法: 2.2 缓存穿透概念: 出现这种情况的原因: 解决方案: 2.我们也可以使用布隆过滤器来更好的解决这个问题 2.3 缓存雪崩概念:缓存雪崩其实和缓存击穿有些类似,都是指在缓存中找不到数据了。但是缓存雪崩更为可怕,它是指缓存层支撑不住或宕掉后, 大量请求打向后端存储层。 3.Redis对于过期键清除策略3.1 被动删除(惰性删除)当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期 key 3.2 主动删除由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key 3.3 主动清理策略当前已用内存超过maxmemory限定时,触发主动清理策略 a) 针对设置了过期时间的key做处理:
b) 针对所有的key做处理:
c) 不处理:
常见的使用策略 LRU 算法(Least Recently Used,最近最少使用) 淘汰很久没被访问过的数据,以最近一次访问时间作为参考。 LFU 算法(Least Frequently Used,最不经常使用) 淘汰最近一段时间被访问次数最少的数据,以次数作为参考。 4. 布隆过滤器对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在(先记住这句话) 布隆过滤器其实就是一个大型的位数组和几个不一样的无偏 hash 函数(所谓无偏就是能够把元素的 hash 值算得比较均匀)。
布隆过滤器执行过程: 2.然后对位数组长度进行取模运算得到一个位置,每个hash函数都会算得一个不同的位置。再把位数组的这几个位置都置为1就完成了add 操作。 3.向布隆过滤器询问 key 是否存在时,跟add一样,也会把 hash的几个位置都算出来,看看位数组中这几个位置是否都为 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。如果都是 1,这并不能说明这个 key 就一定存在,只是极有可能存在。 问题:
所以说,使用布隆过滤器要比设置空值缓存好的多。因为如果出现恶意攻击,如果有1千万个不存在的key,那么对于内存或者redis的空间占用是非常大的。但是布隆过滤器的特性,对比下来则占用的空间非常小。 使用的时候要注意:布隆过滤器是不能进行修改的,只能一开始就将数据导入 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:07:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |