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分钟随机。这样,每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

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

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

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

相关推荐
youxiao_9042 分钟前
Mysql 备份与还原
数据库·mysql
友友马42 分钟前
『MySQL - 进阶』存储过程(上):核心概念、变量体系与流程控制
android·数据库·mysql
网安老伯43 分钟前
计算机网络:网络安全(网络安全概述)
开发语言·数据库·python·计算机网络·web安全·网络安全·php
zhougl99643 分钟前
学习-深入学习SQL语句
数据库·sql·学习
TDengine (老段)43 分钟前
工业大数据平台 TDengine IDMP 让数据计算变得简单智能
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
unclecss43 分钟前
从根儿上把接口加速 10 倍:Spring Boot 3 + 本地缓存「金字塔」实战
spring boot·后端·缓存·性能优化·caffe
('-')43 分钟前
《从根上理解MySQL是怎样运行的》第二十三章笔记
数据库·笔记·mysql
卿雪1 小时前
MySQL【数据类型】:CHAR 和 VARCHAR 的对比、VATCHAR(n) 和 INT(n) 里的 n 一样吗?
android·java·数据库·python·mysql·adb·golang
麦聪聊数据1 小时前
Web架构如何打通从SQL 脚本到API 服务的全链路追踪?
数据库·sql·架构