当前位置: 首页 > news >正文

redis缓存穿透问题

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

常见的解决办法:

缓存空对象:第一次请求发现redis和数据库中都不存在时,,可以设置请求数据为key,null为值,放置在缓存中.

但是会有一个问题,就是如果此类请求过多,会导致内存压力过大,解决办法:设置五分钟的过期时间,但是当我们后续对这个key赋值时,会导致短期的数据不一致问题.

优点:实现简单,维护方便.

缺点:额外的内存消耗,可能会导致数据短期的不一致问题

布隆过滤器:是在redis之前进行的操作,也就是说,请求发过来时,不先查看缓存,而是先查看布隆过滤器,如果布隆过滤器没有,直接拒绝,如果认为存在,才放行,但是数据不一定真的在redis或者数据库中存在

原理:是将数据库中的数据基于某一种哈希算法计算出他的哈希值,然后将哈希值转换为二进制位,将其存入到布隆过滤其中,让其做判断,只会拒绝一定不存在的数据

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

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

其他解决办法:

增强参数的复杂度,避免被猜测id规律;

做好数据的基础格式校验

加强用户权限校验,比如设置必须登录之后才能访问等等

做好热点参数的限流

http://www.lryc.cn/news/176172.html

相关文章:

  • 学生宿舍管理系统(前端java+后端Vue)实现-含前端与后端程序
  • codesys【网桥】
  • JS生成随机字符串的多种方法
  • 多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)
  • PyTorch中的pyi檔案生成機制
  • GeoServer运行报错503,……Unmapped relationship: 7
  • uniapp ui安装 阿里图标库使用 报错 Assignment to constant variable.
  • Spring IOC容器实例化Bean整体流程图
  • 【挑战开发100个项目 | 2. C语言图书管理系统】
  • 二刷力扣--二叉树(2)
  • 【C++ Efficiency】使用运算符的复合形式取代其单独形式,效率更高
  • uview的真机演示,微信小程序,当两个input框的时候,从一个input切换到两一个input的时候,键盘调不起来
  • 信息化发展58
  • 2023前端面试题
  • Spring整合第三方框架-MyBatis原始操作代码
  • 比特币 ZK 赏金系列:第 2 部分——查找哈希冲突
  • Android9底部导航栏出现空白按钮问题分析
  • 秦时明月沧海手游阵容推荐,秦时明月沧海角色强度
  • 基于微信小程序的大学生科技竞赛竞技报名系统设计与实现(源码+lw+部署文档+讲解等)
  • crypto:摩丝
  • Docker最基本使用
  • vue2.x 迭代更新项目去掉缓存处理
  • Linux高性能服务器编程 学习笔记 第八章 高性能服务器程序框架
  • 技术对比:Flutter vs. 传统桌面应用开发框架
  • [C++ 网络协议] 异步通知I/O模型
  • Postgresql事务测试
  • 【数据结构--排序】冒泡排序,选择排序,插入排序
  • vue pc端/手机移动端 — 下载导出当前表格页面pdf格式
  • 125. 验证回文串 【简单题】
  • 描述性统计分析