Redis中缓存相关的总结

Redis中缓存相关的总结

1.缓存穿透


缓存穿透指的是查询一个一定不存在的数据时,由于存储层查不到数据因此不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能会导致 DB 挂掉。在这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它。那么什么是布隆过滤器呢?

布隆过滤器主要是用于检索一个元素是否在一个集合中。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个key来了之后,经过3次hash计算,在模数组长度找到数据的下标,然后把数组中原来的0改为1。这样,三个数组的位置就能标明一个key的存在。查找的过程也是一样的。当然,布隆过滤器有可能会产生一定的误判,因为不同的ket可能会计算出相同的位置,一般数组长度越小越容易出现覆盖。我们一般可以设置这个误判率,大概不会超过5%。其实这个误判是必然存在的,要不就得增加数组的长度。5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

2.缓存击穿

缓存击穿指的是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这个时间点对这个Key有大量的并发请求过来。这些请求发现缓存过期,一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。

3.缓存雪崩

缓存雪崩指的是设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重而雪崩。与缓存击穿的区别是:雪崩是很多key,而击穿是某一个key缓存。解决方案主要是,可以将缓存失效时间分散开。比如,可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机。这样,每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

最后,可以来一个视频中的总结。

很难引发集体失效的事件。

最后,可以来一个视频中的总结。

相关推荐
haixingtianxinghai19 分钟前
Redis真的是单线程吗?
数据库·redis·缓存
FirstFrost --sy40 分钟前
MySQL复合查询
数据库·mysql
imuliuliang1 小时前
MySQL的底层原理与架构
数据库·mysql·架构
尽兴-1 小时前
Redis7 底层数据结构解析
数据结构·数据库·缓存·redis7
m0_730115111 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
qq_410194291 小时前
SQL语句性能优化
数据库·sql·性能优化
小江的记录本2 小时前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
wanhengidc2 小时前
《三国志异闻录》搬砖新游戏 云手机
运维·服务器·数据库·游戏·智能手机
2301_807367192 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_795741792 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python