Redis面试题(个人总结)

1、Redis特点

1、Redis是一个高性能且基于内存的数据库,所有的数据形式都是以键值对的方式来存储的
2、Redis支持丰富的数据类型,例如string,list,set,sorted set,hash,这些类型指的是键值对中的值的类型
3、Redis支持持久化
4、Redis单线程,单进程,由于是单线程和单进程的,所以它的线程是安全的。

2、Redis持久化机制

Redis提供了两种快照持久化机制:第一种方式是RDB持久化,官方说法叫快照持久化,也是redis的默认的持久化方式,这种方式可以将某一时刻的所有数据都写入硬盘中。
它的快照生成方式有两种,一种是服务器配置自动触发,还有一种是在客户端使用BGSAVE或SAVE手动创建快照。更推荐使用BGSAVE来创建快照,因为BGSAVE相对于SAVE来说可以在创建快照的同时,还能同一时刻处理用户的请求。第二种方式是AOF持久化,这种方式可以将所有客户端执行的写命令记录到日志文件中,AOF持久化会将被执行的写命令写到AOF的文件末尾,以此来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集.

3、AOF文件的重写

redis7.0之前:
在7.0之前,只有一个aof文件,触发重写机制时,旧的aof文件经过重写产生一个新的aof文件,同时也会生成一个临时文件去存放在重写期间内的用户请求,之后再将临时文件追加到新的aof文件中去替换旧的aof文件。从redis7.0开始,除了aof文件,还有rdb快照文件以及rdb的校验文件,触发重写机制时,会产生一个临时文件,旧的aof文件和旧的rdb文件会向临时文件中写数据,写完之后临时文件进行重写产生一个新的rdb快照文件替换旧的rdb文件,同时也会生成一个新的aof文件去存储重写期间内的用户请求。

4、Redis主从复制

主从复制架构是用来解决数据备份的问题,从节点仅仅用来同步数据

5、Redis哨兵机制

哨兵机制是Redis的高可用性解决方案,由一个或多个Sentinel实例组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,当主服务器发生故障时,会将从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。无法解决: 1.单节点并发压力问题   2.单节点内存和磁盘物理上限        通俗来说就是无法解决负载均衡问题。

6、穿透、雪崩、击穿

缓存穿透

产生的原因:请求根本不存在的资源
举例:当大量的客户端发送大量的不可响应的请求 ,就可能导致出现缓存穿透的情况。因为数据库DB中本身就没有该请求的数据,所以Redis也没有对应的数据,那么这些请求在redis就得不到响应,就会直接打在DB(业务数据库)上,导致DB压力过大而卡死情景在线或宕机解决方法:
(1)对空值进行缓存类似于上面的例子,虽然数据库中没有该请求的数据,但是在redis中对他进行缓存(key=xxx,value=null),这样当请求到达redis的时候就会直接返回一个null的值给客户端,避免了大量无法访问的数据直接打在DB上。(2)实时监控对redis进行实时监控,当发现redis中的命中率下降的时候进行原因的排查,配合运维人员对访问对象和访问数据进行分析查询,从而进行黑名单的设置限制服务。(3)使用Boolean过滤器使用BitMap作为布隆过滤器,将目前所有可以访问到的资源通过简单的映射关系放入到布隆过滤器中(哈希计算),当一个请求来临的时候先进行布隆过滤器的判断,如果有那么才进行放行,否则就直接拦截。(4)接口校验类似于用户权限的拦截,对于无效访问就直接拦截,不允许这些请求到达Redis、DB上。

缓存雪崩

产生的原因:redis中大量的key集体过期举例:当redis中的大量key集体过期,可以理解为redis中的大部分数据都被清空了(失效了),那么这时候如果有大量并发的请求来到,那么redis就无法进行有效的响应(命中率急剧下降),请求就都打到DB上了,到时DB直接崩溃。解决方法:
1. 使用互斥锁(Mutex Lock)或分布式锁,只允许一个请求去访问后端数据源,其他请求等待并共享结果。(推荐使用)
2. 将失效时间分散开, 通过使用自动生成随机数使得key的过期时间是随机的,防止集体过期
3. 使用多级架构,使用nginx缓存+redis缓存+其他缓存,不同层使用不同的缓存,可靠性更强
4. 设置缓存标记,记录缓存数据是否过期,如果过期会触发通知另外的线程在后台去更新实际的key
5. 设置热点数据的永远不过期或过期时间较长,以减少热点数据失效的机会。

缓存击穿

产生的原因:redis中的某个热点key过期,但是此时有大量的用户访问该过期key。举例:某个热搜很火,这时候大家都在访问该热点事件,但是可能由于某种原因,redis的这个热点key过期了,那么这时候大量高并发对于该key的请求就得不到redis的响应,那么就会将请求直接打在DB服务器上,导致整个DB瘫痪。解决方案:
1. 为缓存数据设置不同的过期时间,使其在不同时间点过期,避免集中失效。监控数据,适时调整,监控哪些数据是热门数据,实时的调整key的过期时长
2. 引入两级缓存架构,例如使用本地缓存(如Guava Cache)作为第一级缓存,并设置较短的过期时间,Redis作为第二级缓存,并设置较长的过期时间。
3. 针对热点数据,可以提前进行预加载,保证其缓存不会在同一时间全部失效。

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

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

相关文章

MQTT通讯协议接入

1.MQTT协议概述 MQTT是一种基于发布/订阅模式的轻量级消息传输协议,常用于低带宽、不可靠网络环境下传输消息,适用于物联网设备之间的通信。 1.1 MQTT协议的组件 客户端(Client):连接到MQTT代理服务器的设备&#xff…

触摸芯片在物联网和人工智能上的应用

在科技更新换代频繁的时代,触摸芯片作为一种重要的人机交互技术,已经在逐渐融入我们的生活。为我们带来了更加便捷、直观的电子产品操作体验,让人与机器之间的沟通变得更加自然流畅。今天我们就来说一说触摸芯片。 触摸芯片的核心是电容感应…

dijkstra 算法为什么高效?

Dijkstra算法的高效性主要体现在其解决有权图中最短路径问题时所采用的方法和策略上。以下是对Dijkstra算法高效性的详细解释: 贪心策略: Dijkstra算法基于贪心原理,在每一步中总是选择具有最小暂定距离的节点。这种策略保证了算法首先探索一…

计算机组成原理(六)

0x12345678和12345678H都是指同一个十六进制,也就是12345678,不过是不同的编程语言的写法而已 具体来说,如果有 n 根地址线,计算机可以寻址的内存空间大小是 2^n 字节。 24根地址线: 如果一个系统有24根地址线,意味着它…

Codeforces Round 952 (Div. 4)

题解写到博客园了,懒得复制过来了了,放个链接 https://www.cnblogs.com/yxcblogs/p/18243276 推广一下自己记录的算法编程竞赛模板仓库 GitHub - yxc-s/programming-template: This repository contains C programming templates optimized for competi…

汇编程序设计之 位操作指令、顺序程序设计

文章目录 位操作类指令逻辑运算指令NOTORANDXORTEST 移位指令逻辑移位算数移位循环移位指令 处理机控制类指令顺序结构程序设计概念例子 位操作类指令 逻辑运算指令 NOT OR 对于每一个位,有1即为1 AND 同时为1才是1 XOR 不相同才为1 TEST 和and 一样的功能&…

postman接口测试工具详解

Postman是一款非常流行的API开发和测试工具,它不仅适用于测试人员,也广泛被开发者使用。Postman提供了全面的功能,能够帮助用户构建、测试、修改和监控API。以下是关于Postman接口测试工具的一些关键功能和使用步骤的详解: 功能概…

RK3568技术笔记六 新建 Ubuntu Linux 虚拟机

VMware 安装完成后,启动 VMware 软件。启动后在 VMware 主界面点击“创建新的虚拟机”。如下图所示: 开始对新建的虚拟机进行设置。选择“自定义”,然后点击“下一步”。如下图所示: 使用默认配置,单击“下一步”。如下…

PyTorch -- 最常见激活函数的选择

首先,简单复习下什么是梯度:梯度是偏微分的集合 举例说明:对于 z y 2 − x 2 : ∇ z ( ∂ z ∂ x , ∂ z ∂ y ) ( 2 x , 2 y ) z y^2-x^2: \nabla z (\frac{\partial z}{\partial x}, \frac{\partial z}{\partia…

夏日炎炎 水域守护:北斗守护安全防线——为生命撑起智能保护伞

随着夏季的来临,炎热的天气让许多人纷纷寻求水的清凉。清凉的河流与广阔的海域成为了不少人消暑降温的向往之地。然而,私自下河、下海的行为却暗藏着巨大的安全隐患,每年夏季溺水事故频发,给无数家庭带来不可挽回的悲痛。为有效遏…

规模弹性: 管理谷歌的TPUv4机器学习超级计算机

摘要 TPUv4(张量处理单元)是谷歌用于机器学习训练的第三代加速器,采用定制的三维环形互连,部署为 4096 节点的超级计算机。在本文中,我们将介绍设计和运行软件基础设施的经验,这些软件基础设施使 TPUv4 超…

Git进阶使用(图文详解)

文章目录 Git概述Git基础指令Git进阶使用一、Git分支1.主干分支2.其他分支2.1创建分支2.2查看分支1. 查看本地分支2. 查看远程分支3. 查看本地和远程分支4. 显示分支的详细信息5. 查看已合并和未合并的分支 2.3切换分支1. 切换到已有的本地分支2. 创建并切换到新分支3. 切换到远…

【SkiaSharp绘图03】SKPaint详解(一)BlendMode混合模式、ColorFilter颜色滤镜

文章目录 SKPaintSKPaint属性BlendMode获取或设置混合模式SKBlendMode 枚举成员效果预览 Color/ColorF获取或设置前景色ColorFilter 颜色滤镜CreateBlendMode 混合模式CreateColorMatrix 颜色转换CreateCompose 组合滤镜CreateHighContrast 高对比度滤镜CreateLighting 照明滤镜…

flask实战之模板实现公共导航

基础实现 目标 在Flask中,使用模板继承和块(blocks)可以方便地提取公共导航菜单,使得您可以在多个页面上重用相同的导航结构。以下是一个基本示例,展示如何创建一个包含公共导航菜单的模板: 创建基础模板…

译译交友项目介绍

一、 项目背景 随着社会的进步,英语作为一种国际语言,很多人都在学习英语,然而现在很多人都会因为学习英语而烦恼,有时还会因为是一个人学习而感到枯燥。面对情绪的低落,往往会使学习更困难。因此,我打造了…

游戏心理学Day13

游戏成瘾 成瘾的概念来自于药物依赖,表现为为了感受药物带来的精神效应,或是为了避免由于断药所引起的不适和强迫性,连续定期使用该药的 行为现在成瘾除了药物成瘾外,还包括行为成瘾。成瘾的核心特征是不知道成瘾的概念来自于药…

MySQL系列-语法说明以及基本操作(二)

1、MySQL数据表的约束 1.1、MySQL主键 “主键(PRIMARY KEY)”的完整称呼是“主键约束”。 MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 …

编程基础知识读后感怎么写:深入剖析与全面解读

编程基础知识读后感怎么写:深入剖析与全面解读 在阅读完编程基础知识相关书籍或资料后,撰写一篇高质量的读后感是巩固所学、深化理解的重要方式。然而,如何写出一篇既有深度又有广度的读后感,却是一个让许多人感到困惑的问题。本…

微信小程序开发教程

尚硅谷微信小程序开发教程,2024最新版微信小程序项目实战! 一、小程序基础 1. 初始小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 使用小程序时 不需要下载,用户 扫一扫 或 搜一下 即可打开应用,它也体现了 “用…

【ARM Cache 及 MMU 系列文章 6.4 -- ARMv8/v9 如何读取 Cache Tag 及分析其数据?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…