Rredis缓存常见面试题

文章目录

      • 1.什么是缓存穿透,怎么解决
      • 2.什么是缓存击穿,怎么解决
      • 3.什么是缓存雪崩,怎么解决
      • 4.双写一致性问题
      • 5.redisson添加的排他锁是如何保证读写、读读互斥的
      • 6.为什么不使用延迟双删
      • 7.redis做为缓存,数据的持久化是怎么做的
      • 8.redis的数据过期策略
      • 9.redis的数据淘汰策略

1.什么是缓存穿透,怎么解决

缓存穿透:查询一个不存在的数据,MySQL查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库
解决方案一:缓存空数据
当查询到一个不存在的数据,返回缓存空数据,但是当数据真正有的时候,缓存中还是空数据,就会导致数据不一致
解决方案二:布隆过滤器
在这里插入图片描述

位图的思路:通过hash运算三次得到三个对应的值,如果三个值都为1即存在,如果其中一个不为1即不存在,存在一定的误判率,但完全可以接受

2.什么是缓存击穿,怎么解决

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间吧DB压垮
解决方案一:互斥锁,强一致,性能差
解决方案二:逻辑过期,高可用,性能优,不能保证数据绝对一致
在这里插入图片描述

3.什么是缓存雪崩,怎么解决

缓存雪崩:同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力
解决方案:
● 给不同的key的TTL添加随机值
● 利用Redis集群提高服务的可用性
● 给缓存业务添加降级限流策略 降级可做为系统的保底策略,适用于穿透、击穿、雪崩
● 给业务添加多级缓存

4.双写一致性问题

采用redisson实现的读写锁,在读的时候添加共享锁,可以保证读读不互斥,读写互斥。当我们更新数据的时候,添加排他锁,它是读读,读写都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。这里面需要注意的是读方法和写方法上需要使用同一锁才行。
注意:这种情况只有必须保证强一致性的时候才会使用

开发中大部分是允许短暂的不一致的,这个时候采用异步的方案
● 使用MQ中间件,更新数据之后,通知缓存删除
● 利用canal中间件,不需要修改业务代码,伪装为MySQL的一个从节点,canal通过读取binlog数据更新缓存

5.redisson添加的排他锁是如何保证读写、读读互斥的

排他锁底层使用也是setnx,保证了同时只能由一个线程操作锁住的方法

6.为什么不使用延迟双删

延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在演示的过程中可能会出现脏数据,并不能保证强一致性,所以没有采用

7.redis做为缓存,数据的持久化是怎么做的

有两种方式,一种是RDB,一种是AOF
RDB是一个快照文件,它是把 redis内存存储的数据写到磁盘上,当redis实例宕机恢复数据的时候,方便从RDB的快照文件中恢复数据
AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中,当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据
在这里插入图片描述

RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令

8.redis的数据过期策略

第一种是惰性删除,在设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key
第二种是定期删除,每隔一段时间,我们就对一些Key进行检查,删除里面过期的key
定期清理的两种模式:
● SLOW模式是定时任务,执行频率默认是10HZ,每次不超过25MS,以通过修改配置文件redis.conf的HZ选项来调整这个次数
● FAST模式执行频率不固定,每次时间循环会尝试执行,但两次间隔不低于2ms,每次耗时不超过1ms
Redis的过期删除策略:惰性删除+定期删除两种策略进行配合使用

9.redis的数据淘汰策略

  1. Redis提供了8种不同的数据淘汰策略,默认是noeviction不删除任何数据,内存不足直接报错
  2. LRU:最少最近使用,用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高
  3. LFU:最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高
    平时开发过程种用的比较多的就是allkeys-lru,挑选最近最少使用的数据淘汰,把一些经常访问的key留在redis中

数据库有1000万数据,Redis只能缓存20W数据,如何保证Redis中的数据都是热点数据
回答:使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,那留下来的都是经常访问的热点数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513815.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【热门话题】文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较一、技术背景…

成绩管理系统|基于springboot成绩管理系统的设计与实现(附项目源码+论文)

基于springboot成绩管理系统的设计与实现 一、摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装毕业设计成绩管…

HarmonyOS应用开发ArkUI(TS)电商项目实战

项目介绍 本项目基于 HarmonyOS 的ArkUI框架TS扩展的声明式开发范式,关于语法和概念直接看官网官方文档地址:基于TS扩展的声明式开发范式, 工具版本: DevEco Studio 3.1 Canary1 SDK版本: 3.1.9.7(API V…

海外媒体软文发稿:带动海外宣发新潮流,迈向国际舞台

引言 随着全球化的发展,越来越多的中国企业希望在国际舞台上展示自己的实力。而海外媒体软文发稿作为一种全新的海外宣传方式,正逐渐成为带动海外宣发新潮流的有力工具。本文将探讨海外媒体软文发稿的优势和如何迈向国际舞台。 海外媒体软文发稿的优势…

代码随想录阅读笔记-二叉树【最大二叉树】

题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树&#x…

linux系统负载对系统的意义

负载平均值的含义 负载平均值是通过uptime和top命令显示的三个数字,分别代表不同时间段的平均负载(1分钟、5分钟和15分钟的平均值)。这三个数字越低越好,较高的数字意味着系统可能存在问题或过载。然而,并没有一个固定…

男生穿什么裤子最帅?必备的男生裤子推荐

每个人都想拥有很多条好看质量又好的裤子。不过市面上有太多服装品牌,甚至还有不少劣质的衣裤,穿洗两遍之后就出现松垮、变形的情况。为了能够让大家可以选到合适的衣裤,我自费购买了多个品牌的裤子,并给出大家测评结果。 购买到质…

网站访问502,网站服务器崩溃,比较常见几个的原因

其实,配置再好的服务器也难免在使用过程中出现一些故障,造成宕机。 服务器一旦出现故障,影响到用户实时访问网站,造成用户流失,如果在企业的销售高峰期,则将直接影响到商业利润,而且不仅影响外…

SD-WAN降低网络运维难度的三大关键技术

企业网络作为现代企业不可或缺的基础设施,承担着连接全球的重要任务。随着全球化和数字化转型的加速推进,企业面临着越来越多的网络挑战和压力。传统的网络组网方式已经不能满足企业规模扩大、分支机构增多、上云服务等需求,导致了网络性能下…

消除歧义:利用动态上下文提出有效的RAG问题建议

原文地址:disambiguation-using-dynamic-context-in-crafting-effective-rag-question-suggestions 2024 年 4 月 3 日 这一策略唤起了IBM沃森率先采用的一项技术:消除歧义。面对用户模糊不清的输入,系统会提供大约五个或更少的选项供用户挑…

软件架构风格_3.以数据为中心的体系结构风格

以数据为中心的体系结构风格主要包括仓库体系结构风格和黑板体系结构风格。 1.仓库体系结构风格 仓库(Repository)是存储和维护数据的中心场所。在仓库风格(见图1)中,有两种不同的构件:中央数据结构说明当…

5米分辨率数字高程模型(DEM)的制作

在现代科技的驱动下,地理信息系统(GIS)和遥感技术已经取得了惊人的进展。其中一项令人瞩目的技术就是5米分辨率数字高程模型(DEM)的制作,它是基于多颗高分辨率卫星数据为原始数据,借助智能立体模…

Android 性能优化之黑科技开道(一)

1. 缘起 在开发电视版智家 App9.0 项目的时候,发现了一个性能问题。电视系统原本剩余的可用资源就少,而随着 9.0 功能的进一步增多,特别是门铃、门锁、多路视频同屏监控后等功能的增加,开始出现了卡顿情况。 经过调研分析发现有…

Apache DolphinScheduler 【安装部署】

前言 今天来学习一下 DolphinScheduler ,这是一个任务调度工具,现在用的比较火爆。 1、安装部署 1.0、准备工作 1.0.1、集群规划 dolphinscheduler 比较吃内存,所以尽量给 master 节点多分配一点内存,桌面和虚拟机里能关的应用…

P2249 【深基13.例1】查找 (二分)

题目链接 代码&#xff1a; #include<algorithm> #include<iostream> #include<cstring> #include<queue> #include<cmath>using namespace std; //就是找左端点&#xff0c;没有输出-1 int n; int q; int a[1000010];int main() {scanf("…

Qt QML的枚举浅用

QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的&#xff0c;C的枚举定义方法 序言 概念 QML的枚举和C的其实差不多&#xff0c;但是呢&#xff0c;局限比较多&#xff0c;首先不能在main.qml里定义&#xff0c;也不能在子项中定义。 …

Java入门教程||Java 多线程编程

Java 多线程编程 Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程&#xff0c;并且每个线程定义了一个独立的执行路径。 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。 这里定义和线程…

晶核养号攻略,小白必读攻略!

晶核手游作为一款深受玩家喜爱的游戏&#xff0c;养号是玩家们在游戏中常常会碰到的问题之一。在这个攻略中&#xff0c;我们将为新手玩家们提供一些养号的建议和技巧&#xff0c;帮助他们更好地管理和提升自己的游戏账号。 1. 初始阶段的金币管理 在游戏初期&#xff0c;前60…

四信AI智能视频边缘分析盒+传感云平台,开启食品安全智慧监管新模式

方案背景 民以食为天&#xff0c;食品是人类生存必备的物质之一&#xff0c;食品生产安全关乎每个人的生命健康与社会可持续发展。在食品生产过程中&#xff0c;如何实现安全、健康生产是监管机构首要考虑因素&#xff0c;也是当今社会必须共同关注与努力的方向。 监管机构必…

C语言中的数组与函数指针:深入解析与应用

文章目录 一、引言二、数组的定义1、数组的定义与初始化2、char*与char[]的区别1. 存储与表示2. 修改内容3. 作为函数参数 三、字符串指针数组1. 定义与概念2. 使用示例3. 内存管理 四、从字符串指针数组到函数指针的过渡1、字符串指针数组的应用场景2、函数指针的基本概念3、如…