Redis缓存穿透/缓存雪崩/缓存击穿(案例:产生的原因 解决方案利/弊)

缓存穿透

 缓存穿透:去缓存查询没有命中数据 而进mysql查询数据
           不能避免低频缓存穿透,避免高频的缓存穿透
 第一种
 id=-1
 黑客通过一个固定非法请求去攻击数据库
 可采用null再次缓存的解决方案
第二种
id=uuid
过滤器
在redis和mysql之间安装一个过滤器
(1) 解决过滤器内存紧张的问题
布隆算法 :通过一定的错误率换取空间

通过一个bit数组来标识
1 hash的范围[0,length-1]
2 计算出来hash值  足够散列
3 数组初始化全是0
4 比如id=10 计算出hash值=5 那么标识bit数组下标等于5的标记为1
5 存在hash碰撞
6 减少hash配置  多用几个hash函数  同时标记
7 弊端删除数据 (bit数据里的值1 不能随便改成0)
解决方案 : 搞一个计数器二位数组  如果计数器为可以删除
hash 错误率
布隆算法说数据存在,那么实际可能不存在(hash碰撞)
说数据不存在,那么肯定不存在

缓存雪崩

缓存层在 在某一个时刻(无法访问)导致大量的请求大向mysql数据库
可能发生缓存雪崩的原因
(1) redis中缓存的数据有效期一致
解决方案: 对不同的数据设置不同的有效期(随机有效期)
(2) redis数据库挂掉了
解决方案:分布式缓存

分布式缓存
传统的算法 hash取模 数据相对平均
缺点 : 不利于集群扩展

redis集群的hash一致性算法(解决集群的扩展)
hash一致性也有弊端 数据倾斜
增加虚拟节点 (redis槽 16384

缓存击穿(一般公司不解决)

缓存击穿 : redis只缓存一条数据

解决方案分布式锁

弊端: 会出死锁
解决方案: 监听锁的时间 超出设置的timeout 干掉锁
新的问题: timeout设置多长 ???
1s 很短  发生了GC挂了  下一个进程抢到了 (2个进程打架)
10s
1年(哈哈) 下一个进程等待1-1s
zookeeper实现分布式锁 临时有序的节点

其实并不需要这么繁琐 : mysql 查来放进redis缓存就 OK

总结 缓存击穿和缓存雪崩本身都是缓存穿透

缓存击穿和缓存雪崩是缓存穿透的特殊表现

本作品采用《CC 协议》,转载必须注明作者和本文链接
有梦想的人睡不着,没有梦想的人睡不醒。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
88
粉丝
23
喜欢
134
收藏
269
排名:228
访问:4.2 万
私信
所有博文
博客标签
redis
1
php
1
laravel
7
docker
3
orm
2
sync
1
pivot
1
detach
2
attach
2
算法
1
递归
1
多对多
1
lnmp环境搭建
1
GO变量
1
GO数据类型
1
IOC注入反转
1
IOC容器的绑定解析过程(绑定单例)
1
原生微信网页授权登录(natapp穿墙)
1
VMwareNAT网卡配置
1
MySQL基础架构
1
redis 主从搭建
1
Sentinel哨兵模式解决故障转移
1
elasticsearch安装
1
elasticsearch集群安装3台
1
安装kibana
1
必须了解的mysql三大日志-binlog、redo log和undo log
1
何处理数据恢复 数据丢失 面试tx的架构师的岗位问的
1
分库分表插入数据
1
创建分库分表(在主从复制的基本上)
1
分库分表总结
1
mysql总结
1
haproxy状态检测脚本(完成高可用)
1
mysql高可用衡搭建(Keepalived)
1
mysql负载均衡搭建(haproxy)
1
mysql主从恢复数据一致性(pt工具-t-table-checksum和pt-table-sync)
1
终于解决了《====》记一次mysql热备份xtrabackup(没有解决问题)
1
mysql事务
1
MYSQL8.0安装
1
Redis-cluster分布式集群搭建部署
1
比Redis-cluster还好的redis分布式集群(twemproxy)
1
Redis缓存穿透/缓存雪崩/缓存击穿(案例:产生的原因 解决方案利/弊)
1
数据结构之MySQL独爱B+树(二叉树、AVL树、红黑树、B树对比)
1
B-tree
1
B+tree
1
Mycat实现mysql的负载均衡读写分离
2
mysql双主双从 搭建配置
1
mycat 双主双从-负载均衡-高可用
1
Mycat垂直分库
1
记一次mysql高可用技术分享
1
【rabbitmq】安装ampq的扩展的踩坑总结
1
PHP操作MongoDB(增删改查)
1
golang总结
5
社区赞助商