【Redis 开发】缓存穿透解决

缓存穿透

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存就永远不会生效,这些请求都会打到数据库

常见的解决方案有两种:
缓存空对象布隆过滤

缓存空对象

当数据库中查询无果的时候,我们在对应的缓存中写入一个null,在下一次访问的时候就不会到达数据库,由缓存返回一个null

缺点:

额外的内存消耗 (可以为key设置定时有效缓解)

可能造成短期的不一致 (我在数据库插入一条数据,但是对应的缓存中存的是null)

布隆过滤

是一种算法,在客户端与Redis端之间加入了一层布隆过滤器

首先通过布隆过滤器,如果没有数据就拒绝访问,底层时间通过数据库中的数据通过哈希算法算出哈希值存到布隆过滤器中

优点:内存占用少,没有多余的key

缺点:实现复杂,存在误判可能

缓存空对象实现

在服务层判断数据库的时候加入缓存空对象方面的技术

java 复制代码
//user是数据库返回的数据
if(user==null)
{
    StringRedisTemplate.opsForValue().set(key, " ",10,TimeUnit.MINUTES)
    
}

这样下一次查询的时候就会有效缓解缓存穿透的问题

其他缓解方式

  1. 增强id的复杂度
  2. 提高对数据的基本校验
  3. 加强用户权限校验
  4. 做好热点参数的限流
相关推荐
TG:@yunlaoda360 云老大几秒前
华为云国际站代理商GES的应用场景有哪些?
服务器·数据库·华为云
九皇叔叔1 分钟前
一文讲透 MVCC:普通 SELECT 何时不加锁?(RC/RR 实战篇)
数据库·sql·mysql
amunamuna10 分钟前
日常梳理-DNS缓存
缓存
010不二13 分钟前
基于Appium爬虫文本导出可话个人动态
数据库·爬虫·python·appium
H_BB15 分钟前
LRU缓存
数据结构·c++·算法·缓存
火山引擎开发者社区16 分钟前
云数据库 MySQL 2025 运维革新:大版本升级无忧+蓝绿零停机+存储自动扩容全覆盖
运维·数据库·mysql
杜子不疼.1 小时前
Spring AI 与向量数据库:构建企业级 RAG 智能问答系统
数据库·人工智能·spring
山峰哥1 小时前
Python爬虫实战:从零构建高效数据采集系统
开发语言·数据库·爬虫·python·性能优化·架构
_OP_CHEN2 小时前
【C++数据结构进阶】从B + 树 / B * 树到数据库索引:B树的进化之路与 MySQL 实战解析
数据结构·数据库·b树·mysql·innodb·b+树·mylsam
云老大TG:@yunlaoda3608 小时前
华为云国际站代理商TaurusDB的成本优化体现在哪些方面?
大数据·网络·数据库·华为云