【Redis 开发】缓存穿透解决

缓存穿透

缓存穿透

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

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

缓存空对象

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

缺点:

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

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

布隆过滤

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

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

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

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

缓存空对象实现

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

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

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

其他缓解方式

  1. 增强id的复杂度
  2. 提高对数据的基本校验
  3. 加强用户权限校验
  4. 做好热点参数的限流
相关推荐
AI分享猿1 分钟前
重度长上下文开发怎么选?先看缓存是否吃额度
缓存·ai编程
向日的葵00618 分钟前
Redis会话机制vsJWT机制深度解析
数据库·redis·python·缓存·系统架构·jwt
bosins23 分钟前
如何配置SQL Server数据库定时自动备份
数据库
烟雨归来39 分钟前
RAC数据库OS进程消失,GV$SESSION长期残留KILLED僵尸会话处理
数据库·oracle
小龙报1 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
宇宙第一小趴菜1 小时前
六、Oracle 目录结构
数据库·oracle
IvorySQL2 小时前
PG 日报|修复高 IO 并发场景,解决预读机制耗尽本地缓冲区缺陷
数据库·人工智能·sql·postgresql·区块链
TiDB 社区干货传送门2 小时前
TiDB 8.5.7 发版|六项实用功能上线
数据库·mysql·tidb
在繁华处2 小时前
MySQL 学习笔记 01:从概念到约束,搭好库表骨架
数据库·oracle
Y3815326622 小时前
3 种 SERP 数据处理方案对比:流式 / 批处理 / 缓存
java·spring·缓存