天增的博客
首页
博客
  • 分布式解决方案
  • Java并发工具包
  • redis
  • LeetCode
  • 系统设计
  • JVM体系
Github (opens new window)
Rss (opens new window)
  • zh-CN
  • en-US
首页
博客
  • 分布式解决方案
  • Java并发工具包
  • redis
  • LeetCode
  • 系统设计
  • JVM体系
Github (opens new window)
Rss (opens new window)
  • zh-CN
  • en-US
  • redis
  • Redis为什么这么快
    • redis单线程的问题
  • Redis基本数据结构
    • String的底层实现
    • List的底层实现
    • Hash的底层实现
    • Set的底层实现
    • ZSet的底层实现
  • Redis分布式缓存
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩
    • 缓存预热
  • Redis的分布式锁
    • 看门狗模式
    • Redlock
  • Redis集群
    • Redis数据淘汰策略
    • redis持久化
    • Redis数据删除策略
  • topic
  • redis
  • Redis分布式缓存
  • 缓存穿透
2022-04-28

缓存穿透

# 缓存穿透

是值查询一个缓存和数据库中都没有的数据,由于大部分的缓存策略是被动加载的,并且处于容错考虑,如果从存储层查不到数据则不写入缓存。

这个不存在的数据每次都会到存储层去查询,失去缓存的意义,用户不断发起请求,量大甚至可以导致缓存雪崩。

# 接口校验

不要相信前端传来的东西,所以数据一定要在后端进行校验。

我们可以在接口层添加校验,不合法的直接返回即可,没必要做后续的操作。

# 空对象缓存或者缺省值

一般情况下OK。

但是黑客会对你的系统进行攻击,拿一个不存在的id 去查询数据,会产生大量的请求到数据库去查询。可能会导致你的数据库由于压力过大而宕掉。

  • id相同: 第一次打到DB,空对象缓存后第二次就返回null了,避免DB被攻击,不用再到数据库中去走一圈了
  • id不同: 由于存在空对象缓存和缓存回写,redis中的无关紧要的key也会越写越多

# 布隆过滤器

image-20210918170608143

最近更新
01
以 root 身份启动 transmission-daemon
12-13
02
Debian系统安装qbittorrent-nox
12-09
03
LXC Debain12安装zerotier并实现局域网自动nat转发
07-29
更多文章>
Theme by Vdoing | Copyright © 2015-2024 天增 | 苏ICP备16037388号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式