Redis 面试一定要知道的 3 个 问题!

2023-10-30

一、缓存穿透

缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。它拿不到数据时,是会一直查询数据库,这样会对数据库的访问造成很大的压力。

如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。

一般我们可以想到从缓存开始出发,想如果我们给缓存设置一个如果当前数据库不存在的信息,把它缓存成一个空对象,返回给用户。

没错,这是一个解决方案,也就是我们常说的缓存空对象(代码维护简单,但是效果不是很好)。

Redis 也为我们提供了一种解决方案,那就是布隆过滤器(代码维护比较复杂,效果挺好的)。

二、缓存空对象

缓存空对象是指一个请求发送过来,如果此时缓存中和数据库都不存在这个请求所要查询的相关信息,那么数据库就会返回一个空对象,并将这个空对象和请求关联起来存到缓存中,当下次还是这个请求过来的时候,这时缓存就会命中,就直接从缓存中返回这个空对象,这样可以减少访问数据库的压力,提高当前数据库的访问性能。我们接下来可以看下面这个流程
在这里插入图片描述
如果大量不存在的请求过来,那么这时候缓存岂不是会缓存许多空对象了吗?

没错!这也是使用缓存空对象会导致的一个问题:如果时间一长这样会导致缓存中存在大量空对象,这样不仅会占用许多的内存空间,还会浪费许多资源呀!。那这有没有什么可以解决的方法呢?我们来想一想:我们可以将这些对象在一段时间之后清理下不久可以了吗 ~

嗯嗯,没错!在想想 Redis 里是不是给我们提供了有关过期时间的命令呀,这样我们可以在设置空对象的时间,顺便设置一个过期时间,就可以解决个问题了呀!

号外号外,大家可以关注公众号程序员麦冬,可以获取一份我整理的最新面试题资料。

setex key seconds valule
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 面试一定要知道的 3 个 问题! 的相关文章

随机推荐

  • python中debug断点调试

    python Debug 断点调试 断点 break point 是指在代码中指定位置 当程序运行到此位置时变中断下来 并让开发者可查看此时各变量的值 因断点中断的程序并没有结束 可以选择继续执行 方法1 脚本中运行 在需要设置断点的地方
  • commonjs, es6 module什么是循环依赖?

    什么是循环依赖 循环依赖是指模块A依赖于模块B 同时模块B依赖于模块A 比如下面这个例子 foo js const bar require bar js console log value of bar bar module exports
  • 使用亚马逊云科技人工智能内容审核服务,打造安全的图像生成和扩散模型

    生成式人工智能技术发展日新月异 现在已经能够根据文本输入生成文本和图像 Stable Diffusion 是一种文本转图像模型 可让您创建栩栩如生的图像应用 您可以通过 Amazon SageMaker JumpStart 使用 Stabl
  • vue3介绍,Vue3的新特性

    vue3的优势 Vue 是目前国内开发最火的前端框架之一 react vue angular的下载趋势 Vue3性能更高 体积更小 Vue的compositionAPI 组合式API 可以 更好的代码复用 方便构建大型项目 对TS的支持比较
  • 通过DButils与连接池C3P0实现对对数据库的增删改查操作

    需要准备的有 C3P0配置文件
  • Excel匹配两列相同内容到同一行

    1 打开一个excel文件 找到需要自动对齐的两列数据 这里根据需要模拟了两列 2 用鼠标左键单击选中C1单元格 3 在C1单元格内输入公式 IF COUNTIF B 1 B 156 A1 0 A1 4 输入完公式后回车 再次选中C1单元格
  • k8s面试题大全(持续更新中)

    目录 前言 docker的工作原理是什么 讲一下 docker的组成包含哪几大部分 docker与传统虚拟机的区别什么 docker技术的三大核心概念是什么 centos镜像几个G 但是docker centos镜像才几百兆 这是为什么 讲
  • Bootstrap验证

    1 readonly验证需要 重新更新 var bootstrapValidator notice info input form data bootstrapValidator bootstrapValidator updateStatu
  • MySql安装版安装最新教程(附错误解决 )

    目录 1 安装版自定义安装 2 问题总结 1 安装版自定义安装 如果需要安装版安装 可参考另一篇博客 MySql压缩版安装最新教程 附错误解决 链接 MySql官网 滑到最下面 上面的是企业版下载 需要付费 我们下载开源的社区版 在这里我下
  • 编译出现 WARNING: ‘aclocal-1.15‘ is missing on your system.问题解决

    最近在中标麒麟下编译opus 1 2 1 make时出现了WARNING aclocal 1 15 is missing on your system 问题 发现是版本问题 于是重新安装了automake 下面是安装过程 1 下载安装包 h
  • PID恒温控制

    1 PID三个环节的作用 PID三个环节各自的主要作用和效应 比例环节 起主要控制作用 使控制量向目标值靠拢 但可能导致振荡 积分环节 消除稳态误差 但会增加超调量 微分环节 产生阻尼效果 抑制振荡和超调 但会降低响应速度 2 比例系数与积
  • @NotEmpty、@NotBlank、@NotNull 区别和使用

    首先需要说明下 本提到的 NotEmpty NotBlank NotNull 分别是 javax validation constraints NotEmpty javax validation constraints NotBlank j
  • Menu菜单,MenuBar菜单栏,MenuItem菜单项

    Menu菜单 MenuBar菜单栏 MenuItem菜单项 菜单栏 public class MenuDemo public static void main String args Frame f new Frame Menu菜单 Men
  • WEB攻防-通用漏洞&水平垂直越权&购买逻辑漏洞

    目录 水平垂直越权 水平越权 垂直越权 访问控制原理 漏洞判别 防护 购买逻辑漏洞 知识点 详细介绍 防护 案例演示 优惠券 案例演示 CMS 订单修改 水平垂直越权 水平越权 同级用户权限共享 当用户访问数据时未对用户和id值进行有效的查
  • Qt-QPointer的使用

    在使用Qt的时候 你是否遇到过这样的场景 从外部传来一个QObject的指针 当使用这个指针的时候 害怕它已经被释放了 如果我们在一个对象A中引用了另一个对象B 当对象B被析构的时候 A对象其实是不知道B已经被析构 这个时候再使用B的话就会
  • 【技术分享】如何实现功能完备性能优异的RTMP、RTSP播放器?

    技术背景 这几年 我们对接了太多有RTSP或RTMP直播播放器诉求的开发者 他们当中除了寻求完整的解决方案的 还有些是技术探讨 希望能借鉴我们播放端的开发思路或功能特性 完善自己的产品 忙里偷闲 今天我们就再聊一聊老生常谈的问题 如何实现功
  • IntelliJ IDEA 2023.2.1 Android开发变化

    IntelliJ IDEA 2023 2 1之前的版本 Empty Activity是指Empty View Activity 而现在Empty Activity是指Empty Compose Activity 另外多了一个Empty Vi
  • 使用this调用vue中定义的,data中数据或methods中的方法,报错undefined的原因及解决办法

    问题描述 使用this调用vue中定义的data时 报错 这个变量undefined
  • Jenkins+RobotFramework 失败用例重执行方案!

    背景 接口测试用例运行在Jenkins节点上 在某些情况下 比如网络波动等原因 会导致用例运行失败 此时会触发邮件和钉钉预警 通知给到责任人 按照现有策略 当本次构建失败时 会立马触发第二次构建活动 若第二次构建仍然失败 则会再次触发预警信
  • Redis 面试一定要知道的 3 个 问题!

    一 缓存穿透 缓存穿透是指当用户在查询一条数据的时候 而此时数据库和缓存却没有关于这条数据的任何记录 而这条数据在缓存中没找到就会向数据库请求获取数据 它拿不到数据时 是会一直查询数据库 这样会对数据库的访问造成很大的压力 如 用户查询一个