面向面试知识-Redis

news2024/9/29 17:29:11

面向面试知识-Redis

什么是Redis

运行于内存的基于key-value的非关系型数据库。

一款开源的内存数据结构存储,用作数据库、缓存、消息代理等。(可以基于Redis实现分布式锁、以及消息队列)
发布订阅??

对数据类型的操作都是原子性的,因为执行命令由单线程负责,不存在并发竞争的问题。
除此之外,Redis还支持:

Redis与Memcached的区别?

Redis和Memcached的共同点:

  1. 都是基于内存的数据库,性能都很高,一般可以用做缓存;
  2. 都有过期策略。

Redis和Memcached的区别:

  • Redis支持的数据类型更加丰富(String、Hash、Set、List、Zset);而Memcached只支持最简单的key-value数据类型;
  • Redis支持数据的持久化,如何持久化??,可以将内存中的数据保持在磁盘中,重启时可以再次加载使用;而Memcached没有持久化功能;
  • Redis原生支持集群;
  • Redis支持订阅模型、Lua脚本、事务等功能,而Memcached不支持。

为什么使用Redis作为MySQL的缓存

主要是因为高性能和高并发

  1. Redis具备高性能
    运行在内存的key-value缓存,读取速度快。
    在这里插入图片描述
    但是需要一定的方法解决Redis和MySQL数据库数据一致性的问题。
  2. Redis具备高并发
    单台设备的Redis的QPS(Query Per Second),是MySQL的10倍,Redis单机的QPS能轻松破10w,而MySQL单机的QPS很难破1W。
    因此可以考虑把数据库的部分数据转移到缓存中,这样会直接到缓存而不用经过数据库。

Redis的数据类型

类型类型:存储的值:结构的读写能力;

String字符串;缓存对象、常规计数、分布式锁、共享session信息等;
Hash哈希;缓存对象、购物车等??
List列表;消息队列(有两个问题①生产者需要自行实现全局唯一;②不能以消费组形式消费数据等;);
Set集合;聚合计算(并集、交集、差集)场景,比如点赞、共同关注、==抽奖活动,为嘛?==等
Zset有序集合;排序场景,比如排行榜、电话和姓名排序等。

Redis常见数据类型:
在这里插入图片描述
数据类型:存储的值:结构的读写能力
在这里插入图片描述
Redis各数据类型的数据结构实现:
在这里插入图片描述

  1. String类型内部实现:
    主要是SDS,Simple Dynamic String,简单动态字符串。
  • SDS不仅可以保存文本数据,还可以保存二进制数据。
  • SDS获取字符串长度的时间复杂度为O(1)。
  • Redis的SDS API是安全的,拼接字符串不会造成缓冲区溢出。
  1. List类型内部实现:
    底层数据结构是由双向链表或压缩列表实现的:
  • if 列表元素个数小于512,每个item的值都小于64字节,Redis会使用List类型的底层;
  • else 使用双向链表;
    在Redis3.2之后,List数据类型的底层DS只由quickList实现。
  1. Hash类型内部实现:
    压缩列表或者哈希表
  • if 列表元素个数小于512,且所有值小于64字节,用压缩列表;
  • else 使用Hash表;
    Redis 7.0之后只由quickList实现
  1. Set类型内部实现:
    Hash表或者整数集合实现
  • if 集合中的元素都是整数,且元素个数小于512,使用整数集合;
  • else 使用哈希表;
  1. Zset类型内部实现
    压缩列表或者跳表:
  • if 有序集合的元素个数小于128个,且所有元素的值小于64个字节时,使用压缩列表;
  • else 使用跳表;
    Redis7.0之后使用listpack实现。

Redis的线程模型

Redis是单线程吗?

在处理一系列请求时,即接受客户端请求,解析请求,进行数据读写等操作,返回数据给客服端的过程,是单线程;
但是Redis程序并不是单线程的,Redis在启动的时候,会启动后台线程(BIO)。

  • Redis在2.6版本加了两个后台线程,分别处理关闭文件、AOF刷盘两个任务;
  • Redis 4.0之后,新增了一个后台线程,用来异步释放Redis内存,也就是lazyfree线程。
    详细内容见Redis 常见面试题
    之所以 Redis 为「关闭文件、AOF 刷盘、释放内存」这些任务创建单独的线程来处理,是因为这些任务的操作都是很耗时的,如果把这些任务都放在主线程来处理,那么 Redis 主线程就很容易发生阻塞,这样就无法处理后续的请求了。
    在这里插入图片描述
    此图太大了,内容有点多,慢慢看一下;
    在这里插入图片描述

为什么Redis采用单线程都能这么快?

  1. 运行在内存;
  2. 非多线程,避免了多线程竞争,免去了线程切换等的资源消耗;
  3. 采用I/O多路复用处理大量的客户端Socket请求;

Redis在6.0之后引入了多线程,但是主要面向I/O,采用了多个I/O线程来处理网络请求,因为随着网络硬件的性能提升,Redis的性能瓶颈有时会出现在网络I/O的处理上。

Redis持久化

Redis如何实现数据不丢失

Redis运行在内存,当重启或者崩溃,内存中的数据会丢失,因此需要将数据保存至磁盘实现数据的持久化,在Redis重启后重新恢复保存在磁盘中的数据,避免数据丢失。
三种持久化方式:

  • AOF日志:每执行一条写操作,就将该命令以追加的方式写入一个特定文件中。
  • RDB快照:将某一时刻的内存数据,以二进制的方式写入磁盘。
  • 混合持久化方式:集成了AOF和RDB的优点。

AOF日志是如何实现的?

RDB是如何实现的?

上两部分见参考:Redis 如何实现数据不丢失?

Redis的内存淘汰策略

Redis如何保证数据一致性

Redis如何解决数据一致性问题?
延迟双删

如何解决缓存击穿、穿透、雪崩等问题?

缓存击穿

缓存穿透

缓存雪崩

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

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

相关文章

数据库数据恢复-SQL SERVER数据库文件损坏的故障表现数据恢复方案

SQL SERVER数据库故障类型: SQL SERVER数据库MDF(NDF)或LDF损坏。 SQL SERVER数据库故障原因: 1、数据库正在操作过程中,机器突然断电。 2、人为误操作。 SQL SERVER数据库MDF(NDF)或LDF损坏的…

Qt/C++音视频开发55-加密保存到文件并解密播放

一、前言 为了保证视频文件的安全性,有时候需要对保存的视频文件加密,然后播放的时候解密出来再播放,只有加密解密的秘钥一致时才能正常播放,用ffmpeg做视频文件的加密保存和解密播放比较简单,基于ffmpeg强大的字典参…

2023最全软件测试面试八股文(答案+文档+视频讲解)

Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…

【C语言】指针的进阶(三)—— 模拟实现qsort函数以及指针和数组的笔试题解析

目录 1、模拟实现qsort函数 1.1、qsort函数的回顾 1.2、模拟实现qsort函数 2、指针和数组笔试题解析 2.1、一维数组 2.2、字符数组 1、模拟实现qsort函数 1.1、qsort函数的回顾 要模拟实现qsort函数,就要了解清楚qsort函数的参数以及使用方式。 我们先回顾一…

PyTorch实战:实现Cifar10彩色图片分类

目录 前言 一、Cifar10数据集 class torch.utils.data.Dataset torch.utils.data.DataLoader 二、定义神经网络 普通神经网络: 定义损失函数和优化器 训练网络-Net CPU训练 模型准确率 ​编辑 GPU训练 训练网络-LeNet 模型准确率 点关注,防走丢&#x…

9月15日、9月18日上课内容 Zookeeper集群 + Kafka集群

Zookeeper 本章结构 Zookeeper 概述 Zookeeper 定义 *(了解) Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 *****(非常重要,需要掌握) Zookeeper从设计模式…

用低代码开发工具高效构建企业门户

企业信息门户EIP是指将各种应用系统、数据资源和互联网资源统一集中,根据每个用户使用特点和角色的不同,形成个性化的应用界面,并通过对事件和消息的处理、传输把用户有机地联系在一起。 企业随着业务的发展,运作的复杂度也在不断…

第三十二章 Objects

[toc] 第三十二章 Objects Objects 对象类简介 IRIS 通过以下对象类提供对象技术: %Library.RegisteredObject、 %Library.Persistent %Library.SerialObject。 下图展示了这些类之间的继承关系,以及它们的一些参数和方法。 %Library 包的类名称可以…

Vite + Vue3 使用cdn引入依赖 vite cdn vue3 cdn vite引入cdn

Vite Vue3 使用cdn引入依赖 vite cdn vue3 cdn vite引入cdn 1、安装插件2、在 vite.config.js 引用3、main.js4、打包测试 1、安装插件 npm install element-plus --save2、在 vite.config.js 引用 import { defineConfig } from vite import vue from vitejs/plugin-vue// …

用开源代码构建机器人需要考虑的问题

导读或许你正在考虑(或正在进行)将机器人使用开源软件推向市场。这个机器人是基于 linux 构建的。也许你正在使用机器人操作系统(ROS)或任务导向操作套件(MOOS),或者是另外一个可以帮助你简化开…

007 数据结构_堆——“C”

前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips:本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…

AT32F407裸机工程创建

1、建立工程文件夹 2、找到AT提供DEMO例程,我们需要复制相关的内核文件出来,到我们创建的这个文件夹 1)将库文件拿过来 2)内核文件 3)启动文件 我把F407相关的内核文件都复制过来,然后具体看自己使用哪个型号,工程自己添加对应的文…

避雷!这9本期刊已被剔除!9月SCI/SSCI目录已更新(附2023年WOS历次更新全目录)

2023年9月20日,科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9490本期刊,SSCI期刊目录共包含3552本期刊。此次SCIE & SSCI期刊目录更新,与上次更新(2023年8月)相比,共有9本…

共育电商人才,引领行业发展丨知了汇智与协作时代达成战略合作

随着新一轮科技革命和产业革命的深入发展,数字经济正在成为重塑全球经济结构、改变全球竞争格局的关键力量,数字经济与实体经济的深度融合,也将是未来经济发展的重要动力。数字经济的发展正在催生电子商务模式不断创新,新业态下企…

安防监控系统/视频云存储/视频监控平台EasyCVR无法级联上级平台,该如何解决?

安防视频监控系统EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也…

《动手学深度学习》(pytorch版+mxnet版)2023最新

我又来推书了,这次分享的这本书可是重量级,目前已经被55个国家300所大学用于教学,同时受到了学术界与工业界的强烈推荐。 这本书就是李沐、阿斯顿张、立顿、斯莫拉四位大佬联合编写的《动手学深度学习》。本书面向中文读者,能运行…

第二十四章 原理篇:DBB

上班真的好累哦! 理论上应该从RepVGG开始写重参化的,而且上星期就打算写来着! 但是上班真的好累哦完全提不起精神在周末打字看论文! 参考教程: https://arxiv.org/pdf/2103.13425.pdf https://github.com/DingXiaoH/D…

自己实现一个简单的vhost-net

框架 vhost在网络中的位置如图&#xff1a; 要学习具体的框架可以看我之前的文章vhost-net--------深入了解Virtio-networking和vhost-net 接下来&#xff0c;我们自己实现一个vhost. vhost-net代码 在代码中写了详细注释&#xff0c;就直接上代码了 #include <stdio.h…

期权是什么?一分钟带你玩转期权策略!

很多人问我期权是什么&#xff0c;这个问题怎么回答呢&#xff1f;首先期权是一种交易模式&#xff0c;如同股票期货一样&#xff0c;但它又不同于股票和期货&#xff0c;因为它有自己的交易规则和特性&#xff0c;期权更多是一种工具&#xff0c;可以做空大盘对冲下跌风险&…

0018Java程序设计-springboot智慧环卫养管作业平台

文章目录 摘 要目 录系统设计开发环境 摘 要 本智慧环卫养管作业平台就是建立在充分利用现在完善科技技术这个理念基础之上&#xff0c;并使用IT技术进行对环卫养管作业的管理&#xff0c;从而保证环卫养管作业能够高效的进行&#xff0c;可以实现环卫养管作业的在线管理&…