Redis 缓存击穿原理及解决方案

Redis 缓存击穿原理及解决方案

为什么要使用数据缓存?

为什么把数据库的数据放在内存中?

内存速度比磁盘快

可以减少数据库的压力

指标计算的sql很复杂时,可以把结果放在内存中,避免复杂的sql重复查询

为什么不用HashMap做缓存,以及HashMap和Redis的区别?

持久化

存储大小

本地与分布式

API

更丰富的数据结构

过期策略

Redis为什么快?

单线程的多路复用 epoll

内存

Redis缓存击穿什么时候发生?

查询一个必然不存在的数据。每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。

产生问题:

要避免从数据库查询不存在的数据,怎么做?

如何从海量数据中快速判断一个元素是否存在?

如果一个网站有100亿url有一个url存在黑名单中,每条url平均64个字节

1)这个黑名单要怎么存?

2)若此时任意输入一个url,如何判断url是否在这个黑名单中?

解决办法:

布隆过滤器

布隆过滤器使用

1.离线数据加载到布隆过滤器

2.布隆过滤器查询

3.布隆过滤器不存在,直接返回

4.布隆过滤器存在,cache不存在,从数据库查询

5.数据返回

布隆过滤器的本质

1.位数组(二进制向量)

2.一系列随机映射函数

存储什么? 0或1

怎么存储? hash()计算index

怎么快速判断是否存在?布隆过滤器

什么时候出现误判? 哈希碰撞

误判以后会发生什么?不存在的认为存在

怎么减少误判率?m(位数组长度) k(哈希函数的个数)

特性

存在一定的误判率

特点

如果布隆过滤器判断元素存在集合中,元素可能不存在

如果布隆过滤器判断元素不存在,一定不存在

如果元素实际存在,布隆过滤器一定判断存在

如果元素实际不存在,布隆过滤器可能判断存在

为什么用哈希函数?

哈希函数经过计算后都会得到一个相同长度的结果

你可能感兴趣的:(Redis 缓存击穿原理及解决方案)