Redis常见面试题(七)

news2024/11/19 9:26:00

目录

1、什么是缓存预热?

2、什么是缓存热备?

3、什么是缓存雪崩?

4、如何解决缓存雪崩?

5、什么是缓存穿透?

6、如何解决缓存穿透?

7、什么是缓存击穿?

8、如何解决缓存击穿?

9、什么是缓存抖动?

10、如何解决缓存抖动?

11、什么是缓存无底洞?

12、如何解决缓存无底洞?

13、如何解决Redis和数据库双写一致性问题?

14、Redis有哪些危险命令?如何防范?


1、什么是缓存预热?

缓存预热就是新的缓存系统没有任何缓存数据序在缓存重建数据的过程中,系统性能和数据库负载都不太好,所以最好是在系统上线之前就把要缓存的热点数据加载到缓存中,这种缓存预加载手段就是缓存预热。

2、什么是缓存热备?

缓存热备即当一台缓存服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用。

集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂了,从节点立即充当主节点使用。

3、什么是缓存雪崩?

缓存雪崩就是指由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。

4、如何解决缓存雪崩?

缓存雪崩解决方案:

给缓存的失效时间,加上一个随机值,避免集体失效。

1)双缓存,我们有两个缓存,缓存A和缓存B。

缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。然后细分以下几个小点:从缓存A读数据,有则直接返回;

A没有数据;a直接从B读数据,直接返回,并且异步启动一个更新线程,更新线程同时更新缓存A和缓存B。

2)LRU与LFU切换

3)超热数据使用永久key

4)定期维护(自动+人工)

对即将过期数据做访问量分析,确认是否延时,配合访问量统计,做热点数据的延时

5)加锁(慎用)

5、什么是缓存穿透?

缓存穿透指在高并发场景下,如果某个key被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。

简单总结:

缓存击穿:热点数据,数据库压力大  

缓存穿透:本来就是空数据,redis没有该数据,数据库没有该数据

6、如何解决缓存穿透?

缓存穿透解决方案: .

1.缓存空对象

对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非nul) ,如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。

同时,也需要保证缓存数据的时效性。这种方式实现起来成本较低,比较适合命中不高,但可能被频繁更新的数据。

2.单独过滤处理

对所有可能对应数据为空的key进行统一的存放,并在请求前做拦截这样避免请求穿透到后端数据库。这种方式实现起来相对复杂,比较适合命中不高,但是更新不频繁的数据。

7、什么是缓存击穿?

缓存击穿:实际上是缓存雪崩的一个特例,大家使用过微博的应该都知道,微博有一个热门话题的功能,用户对于热门话题的搜索量往往在一些时刻会大大的高于其他话题,这种我们称为系统的“热点”。

由于系统中对这些热点的数据缓存也存在失效时间,在热点的缓存到达失效时间时,此时可能依然会有大量的请求到达系统,没有了缓存层的保护,这些请求同样的会到达从而可能引起故障。

击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。

8、如何解决缓存击穿?

解决方案:

1)对于热点数据进行二级缓存:  

2)对于不同级别的缓存设定不同的失效时间

9、什么是缓存抖动?

缓存抖动可以看做是一种比”缓存雪崩”更轻微的缓存故障,一般是由于缓存节点故障导致,但是也会在一段时间内对系统造成冲击和性能影响。

10、如何解决缓存抖动?

一般是由于缓存节点故障导致,业内推荐的做法是通过一致性Hash算法来解决。

11、什么是缓存无底洞?

该问题由facebook的工作人员提出的facebook在2010 年左右,memcached 节点就已经达3000个示缓存数千G内容。

他们发现了一个问题: memcached连接频率,导致效率下降了,于是加memcached节点,添加了后,发现因为连接频率导致的问题,仍然存在,并没有好转,称之为”无底洞现象”。

目前主流的数据库、缓存、NoSQL、 搜索中间件等都支持分片技术,来满足高性能、高并发、高可用、可扩展等要求,每一次操作都可能需要和不同节点进行网络通信来完成,实例节点越多,则开销会越大,对性能影响就越大。

缓存无底洞现象并不常见,在绝大多数的公司里可能根本不会遇到。

12、如何解决缓存无底洞?

可以从如下几个方面避免和优化:

1.不同的数据分布方式

有些业务数据可能适合Hash分布,而有些业务适合采用范围分布,这样能够从一定程度避免网络IO的开销。

2. I0优化

可以充分利用连接池,NIO等技术来尽可能降低连接开销,增强并发连接能力。

3.一次性获取大的数据集

一次性获取大的数据集,会比分多次去获取小数据集的网络IO开销更小。

13、如何解决Redis和数据库双写致性问题?

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致, 不能出现差异现象,这就比较依赖缓存的过期和更新策略。

一般会在数据发生更改的时,主动更新缓存中的数据或者移除对应的缓存。

1)采取正确更新策略,先更新数据库,再删缓存。

2)可能存在删除缓存失败的问题,提供一个消息队列作补偿措施。

14、Redis有哪些危险命令?如何防范?

Redis有哪些危险命令?

Redis的危险命令主要有以下几个:

●keys

客户端可查询出所有存在的键。.

●flushdb

删除Redis中当前所在数据库中的所有记录,并且此命令从不会执行失败。

●flushall

删除Redis中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。

●config

客户端可修改Redis配置。

怎么禁用或重命名危险命令?

看下redis.conf

默认配置文件,找到SECURITY区域,如以下所示。

看说明,添加rename- command配置即可达到安全目的。

1)禁用命令

2)重命名命令

上面的x可以定义新命令名称或者用随机字符代替。

经过以上的设置之后,危险命令就不会被客户端执行了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何让一个 C 语言项目调用另一个 C++ 项目中某些类所提供的接口?

目前問題是這樣的:有兩個項目 一個項目是用 C 寫的 裏面提供了一個輸入輸出接口 後來從外面弄來了另外一個項目 用 C 寫的 現在需要將 C 項目中所使用的原有接口替換為使用我們的 C 項目中提供的接口 求問能夠實現否? 在项目开发过程中,我们底…

XGBoost总结

1.算法原理 XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,该算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实…

CSS3之3D转换

文章目录一、3D移动translate3d二、perspective(透视)三、translateZ四、rotateX-rotateY-rotateZ五、rotate3d(x,y,z,deg)六、3D呈现transfrom-style七、旋转木马案例一、3D移动translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向&#xff0…

Python 函数用法和底层分析

【无限嚣张(菜菜)】:hello您好,我是菜菜,很高兴您能来访我的博客,我是一名爱好编程学习研究的菜菜,每天分享自己的学习,想法,博客来源与自己的学习项目以及编程中遇到问题…

Android编译ZLMediaKit之实现NVR功能问题点记录

NVR功能 NVR,全称Network Video Recorder,即网络视频录像机,是网络视频监控系统的存储转发部分,NVR与视频编码器或网络摄像机协同工作,完成视频的录像、存储及转发功能。 一、git clone项目 git clone --recursive …

ES 的存储原理

目录 一、ES是什么 二、ES基本结构 2.1、结构图 2.2、基本概念 2.3、与关系数据库概念的类比 2.4、数据如何读写 2.5 容灾能力 三、ES的文件存储结构 每个分片的事务日志(Transaction Log) Index文件夹内文件含义(lucene文件夹) 四、存储步骤…

计算机必备小知识【数据库字段、估算内存】

计算机必备小知识【数据库、内存】 1 mysql数存储类型(database) 1.1 char与varcha区别 char的存储空间是固定长度;varchar是可变长varchar会比char多1至2个字节来存放数据的长度 1.2 varchar存储 ①varchar能存多少汉字、数字呢&#x…

直播弹幕系统(六)- SpringBoot + STOMP + RabbitMQ(使用MQ替代Spring代理)

直播弹幕系统(六)- SpringBoot STOMP RabbitMQ(使用MQ替代Spring代理)前言一. SpringBoot整合RabbitMQ代理Broker1.1 RabbitMQ安装STOMP插件(Docker)1.2 RabbitMQ相关准备1.3 其他代码二. 前端整合Rabbit…

Prometheus_原理架构-安装部署

文章目录1、prometheus简介常见监控软件优势2、组成图讲解3、安装和配置3.1 容器安装3.2 二进制安装3.3 配置热加载1、prometheus简介 是一个监控软件–》监控容器非常好,也可以监控其他的非容器的机器的业务,例如:MySQL,nginx&am…

locksupport的park和unpark

locksupport是什么 LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。 有什么用 接下面我来看看LockSupport有哪些常用的方法。主要有两类方法:park和unpar…

java:jackson 二:Custom Deserialization in Jackson

java:jackson 二:Custom Deserialization in Jackson 1 前言 jackson支持自定义反序列化器,参考文档地址如下: https://www.baeldung.com/jacksonhttps://www.baeldung.com/jackson-deserialization依赖如下(这里使…

基于FPGA的幅频均衡带通滤波器的设计

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 数字通信系统中,由于多径传输、信道衰落等影响,在接收端会产生严重的码间干扰,增大误码率。为了克服码间干扰,提高通信系统的性能,在接…

记录Android Jni编译过程

Gradle配置 我们主要看这个配置文件里面吧,这里面有关于ndk配置的选项。 大概介绍一下,这里面一些字段是干嘛的。 我们看,这里面有两个相仿的字段,都是externalNativeBuild字段,但是位于两个不同的位置,其…

小程序02/小程序 响应式单位rpx 、image组件概念说明 和 mode属性介绍

一. 响应式单位rpx rpx 说明 rpx: 规定不管屏幕为多少px , 100%的屏幕宽度就是750rpx 100% 屏幕的宽度 750rpx rpx响应单位 rpx是微信小程序独有的,解决屏幕自适应的尺寸单位 可以根据屏幕宽度进行自适应,不论大小屏幕,规定屏幕宽为750…

数据首发!空气悬挂前装搭载率破1%,明年冲刺70万套

新能源智能化的合力变革,带动汽车行业进入新的发展周期:如何进一步提升整车轻量化、驾驶和乘坐的安全和体验。这其中,乘用车悬挂系统也在发生新的变化。 此前,除了传统固定式金属螺旋弹簧悬挂,主动悬架系统的前装上车主…

学计算机网络太难?原来方法没用对...

计算机世界里的三座大山: 计算机网络,操作系统,算法与数据结构。跨过去的人都是神一样的存在了。 学计算机网络也要讲究学习方法 从实际案例出发(比如我们在浏览器输入一个网址到展示出内容中间发生了什么事情) 计算机网络出现的…

简单记录一下怎么看package.json文件

首先每个vue工程文件从仓库克隆代码下来的时候,一般都会包含这个文件,这个文件非常重要,package.json包含了关于项目重要信息,如下图所示 其中包含了name、version、description、author、scripts、dependencies、devDependencies…

Django基础

Django 1.项目的创建 创建项目: 删除一些内容: settings.py中: 2.默认项目文件的介绍 3.APP 创建APP: APP文件介绍: 4.快速上手 APP注册: 在app中找到apps.py: 在django的项目setti…

海量数据处理

1.给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 如何找到top K的IP? 思路:(哈希切割) 1.ip本身就是一个字符串,先把ip变成一个整数hash(ip) 2.文件的下标index…

用知识图谱打开梁山好汉一百单八将

说起《水浒传》大家一定不会陌生,《水浒传》是一部以描写古代农民起义为题材的长篇小说,全书描写北宋末年以宋江为首的108位好汉在梁山聚义,之后接受招安、四处征战的故事。它的一大看点便是其人物的描写,用金人瑞曾评的话说&…