【Redis 开发】缓存穿透解决

缓存穿透

缓存穿透

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

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

缓存空对象

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

缺点:

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

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

布隆过滤

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

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

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

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

缓存空对象实现

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

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

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

其他缓解方式

  1. 增强id的复杂度
  2. 提高对数据的基本校验
  3. 加强用户权限校验
  4. 做好热点参数的限流
相关推荐
我不会起名字3223 小时前
Redis 从 0 到 1(三十三):机器断电 Redis 起不来——AOF/RDB 损坏的 4 步抢救流程
redis·数据恢复·aof·rdb·排查
lambo mercy4 小时前
AI智能租房助手
数据库
浮生若城5 小时前
MySQL:库与表的操作
数据库·mysql
薛定谔的悦5 小时前
光储充一体机从主控到执行单元的双层架构
数据库·mongodb·架构
数字新视界5 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
code2cat5 小时前
【随笔】KV缓存量化:省下的显存,要付出多少数值误差
人工智能·缓存·大语言模型
csdn_aspnet5 小时前
Redis 入门:Windows、Mac安装指南
数据库·windows·redis·缓存·mac
山甫aa6 小时前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
IT规划师6 小时前
Redis 数据类型全解 - HyperLogLog:12 KB 估出亿级 UV(八)
redis·uv·hyperloglog·.net10