面向面试知识-Redis

2023-09-20 17:55:46

面向面试知识-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如何解决数据一致性问题?
延迟双删

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

缓存击穿

缓存穿透

缓存雪崩

更多推荐

== 和 equals 的区别

😀前言我们首先介绍了==运算符,它主要用于比较对象的引用地址。我们明确了它适用于基本数据类型和引用类型,以及其默认行为。然后,我们详细讨论了equals方法,它是一个方法,通常用于比较对象的内容。我们强调了需要在自定义类中重写equals方法以便实现对象内容的比较,同时提到了一些重写equals方法时需要遵循的约定�

初创型企业如何申报专精特新中小企业!?

数据显示,我国已培育7万多家技术专精特新中小民营企业,其中自己专精特新“小巨人”企业8997家。去年新上市公司企业中,专精特新中小民营企业占59%。今年我国将深入研究实施提供优质服务企业进行梯度培育工程,力争今年全国专精特新中小企业员工数量超过8万家,计划培育100个左右中小企业文化特色社会产业集群。那么初创型企业申报

【uniapp】Dcloud的uni手机号一键登录,具体实现及踩过的坑,调用uniCloud.getPhoneNumber(),uni.login()等

一键登录Dcloud官网请戳这里,感兴趣的可以看看官网,有很详细的示例,选择App一键登录,可以看到一些常用的概述比如:1、调用uni.login就能弹出一键登录的页面2、一键登录的流程,可以选择先预登录uni.prelogin()或直接登录uni.login()3、要先开通Dcloud一键登录服务,在Dcloud开发

基于5G网络的智能车间MES设计方案

导读在数字化转型建设过程中,机械制造企业的难点是智能车间的设计。随着5G技术的发展,大量的带网络接口的智能设备的投入使用,智能车间的实施成为可能。本文从车间生产计划调度、过程管控、设备管理、质量管理、能耗管理和物流仓储等方面提出了车间MES执行系统设计的要求,同时对企业实施MES的过程提出了四个注意事项。01引言随着网

详解SpringBoot的核心特性

详解SpringBoot的核心特性SpringBoot是一个用于简化Spring应用程序开发的框架,它提供了一系列核心特性,使得开发者能够更快速、更简单地构建和部署Spring应用程序。本文将详细介绍SpringBoot的五个核心特性,并为每个特性提供三个子特性的详细解释。1.独立运行的Spring应用程序Spring

在SpringBoot中如何整合消息服务组件?

在开发中,消息服务组件在系统架构中扮演着举足轻重的角色。本文将介绍消息服务组件的基本概念,以及如何在SpringBoot中整合常见的消息服务组件,如ActiveMQ、RabbitMQ和Kafka。最后,我们将探讨整合消息服务组件在实际应用场景中的优势。1.消息服务组件的基本概念1.1什么是消息服务组件消息服务组件作为一

Spring Boot 有哪些特点?

目录一、自动配置二、嵌入式TomcatWeb服务器三、入门POM四、Actuator执行器API五、SpringBoot初始化器一、自动配置SpringBoot的自动配置是SpringBoot框架提供的一种功能,它可以根据用程序的依赖和配置信息,自动配置一些常见的功能模块。这样,开发人员可以快速构建和部署应用程序,而无

在虚拟机上安装win10/ubuntu的教程

以下内容源于网络资源的学习与整理,如有侵权请告知删除。一、资源下载(1)下载虚拟机Vmware_Pro17:网盘链接(2)下载操作系统镜像:MSDN,我告诉你-做一个安静的工具站或者从网盘下载:win10镜像(囧,没会员不能上传),ubuntu20镜像。二、在虚拟机上安装ubuntu系统1、打开虚拟机,选择文件>>新建

电商平台淘宝、京东、1688等,它们都提供了相应的API数据接口供开发者使用

获取商品数据已经成为许多应用程序的重要组成部分。为了实现这一目标,许多公司和技术开发者使用API数据接口来获取相关数据。本文将详细介绍如何使用API数据接口获取商品数据,并使用Python作为编程语言示例来展示相关代码。API数据接口是一种通信协议,它允许不同的应用程序或服务之间进行数据交换。这些接口通常是由各种平台、

数据结构之美:如何优化内存和性能

文章目录什么是数据结构?内存优化使用紧凑的数据类型避免冗余存储使用位运算压缩数据性能优化使用适当的数据结构减少不必要的复制使用合适的算法数据结构优化的案例分析结论🎉欢迎来到数据结构学习专栏~探索数据结构之美:如何优化内存和性能☆*o(≧▽≦)o*☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客🎈该系列文章专栏:

阿里云ACP认证备考指南,赶紧收藏!

新技术更新迭代,后浪追逐,前浪内卷。唯有硬技能才能助你在职场乘风破浪。作为技术人,该如何有效的提高职场竞争力呢?而证书是一种能非常有效证明自己能力的东西,不仅能够提高简历通过率,为你的面试加分,还可以为你的升职加薪提高筹码,通过考证去提升自己,真的是一种性价比很高的方式。阿里云ACP认证专业工程师考试是当前比较热门的一

热文推荐