Redis高频面试题

一、Redis有什么好处?

  • 高性能:Redis是一个基于内存的数据存储系统,相比于传统的基于磁盘的数据库系统,它能够提供更高的读写性能。
  • 支持丰富的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,这使得它可以用于多种不同的应用场景。
  • 持久化:Redis支持持久化机制,可以将内存中的数据定期写入磁盘,以防止数据丢失。
  • 高可用性:Redis支持主从复制和Sentinel系统,可以实现高可用性和故障恢复。
  • 简单易用:Redis的命令简单易懂,学习曲线较低,使用方便。
  • 丰富的功能:Redis提供了丰富的功能和特性,如事务、发布/订阅、Lua脚本等,可以满足各种需求。

二、Redis为什么那么快?

  • ‌内存存储‌:Redis将数据存储在内存中,这使得读写速度非常快。同时,Redis也提供持久化机制,可以将内存数据异步地写入磁盘中,保证数据的安全性和可靠性。‌
  • 非阻塞I/O多路复用机制‌:Redis使用非阻塞I/O模型,避免了线程上下文切换和系统调用带来的开销,从而大幅提高了并发吞吐量。‌
  • 单线程架构‌:Redis采用单线程架构,避免了多线程间的同步和锁竞争等问题,简化了代码实现和维护。‌
  • 数据结构优化‌:Redis内置了多种数据结构(如哈希表、有序集合等),并对其进行了优化,使得操作复杂度低,能够在很短的时间内完成大量的数据处理。‌‌
  • 预分配内存‌:Redis在初始化时会预先分配一定量的内存空间,避免了频繁的内存分配和释放过程,提高了性能。

三、Redis与 Memcache区别?

Memcached只能存储KV、没有持久化机制,不支持主从复制,是多线程的。

四、Redis的数据结构

String

在这里插入图片描述
在这里插入图片描述

String的实现基于 SDS (简单动态字符串)。SDS特点:
(1)不用担心内存溢出问题,如果需要会对SDS进行扩容。
(2)获取字符串长度时间复杂度为O(1),因为定义了len属性。
(3)通过“空间预分配”和“惰性空间释放”,防止多次重分配内存。
(4)判断是否结束的标志为len属性,可以包含‘\0’(它同样以’\0’结尾时因为这样就可以使用C语言中函数库操作字符串的函数了)。

在这里插入图片描述

在这里插入图片描述
String存在三种编码
在这里插入图片描述
为什么要为不同的大小设计不同的编码?
embstr的使用只分配一次内存空间(因为RedisObject和SDS是连续的),而raw需要分配两次内存空间(分别为RedisObject和SDS分配空间)。
因此与raw相比,embstr的好处在于创建时少分配一次空间,删除时少释放一次空间,以及对象的鄋数据连在一起,寻找方便。
而embstr的坏处也很明显,如果字符串的长度增加需要重新分配内存时,整个Redis
Object和SDS都需要重新分配空间,因此Redis中的embstr实现为只读(这种编码的内容是不能修改的)。
在这里插入图片描述
int和embstr什么时候转化为raw?
1、int数据不再是整数——raw
2、int大小超过了long的范围(2^63-1)——embstr
3、embstr长度超过了44个字符串——raw

应用场景

分布式数据共享
分布式锁
分布式id
限流

Hash哈希

在这里插入图片描述
hash与Strin
在这里插入图片描述
Hash存储原理:Redis中的Hash本身也是一个KV的结构。外层是一样的,内层是基于zipList(压缩列表)和hashTable(哈希表)。

ZipList存储结构

在这里插入图片描述

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

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

相关文章

Javaweb 实验7 JSP内置对象II实现购物车

实验七 JSP内置对象II 目的: 掌握JSP内置对象的使用。理解JSP的作用域掌握session,application对象的使用 实验要求: 完成实验题目要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程: 一、结合之前…

Linux随记(十二)

一、redhat6.9 ,sftp连接后出现2个connect close 问题描述: 操作系统:redhat 6.9 客户反馈,他们机器sftp连接jxx192.168.1.100后出现connection closed排查过程: 登录192.168.1.100 (最开始使用普通用户…

强大的文本编辑器Notepad++8.4.6 最新版

Notepad最新版是一款多功能的代码编辑工具。Notepad官方版支持27种编程语言,涵盖C、C 、Java 、C#,、XML、 HTML,、PHP、python等等,能够帮助程序员提高编辑效率。Notepad软件支持python与sql代码高亮功能,并且免费开源,能够完美地…

【测试平台】打包 子节点android环境配置

背景 本文记录不是安卓Gradle打包,因为我们google play提审,为了规避跟下架包的相似度避免马甲包封号,使用混淆逻辑。 打包环境部署 申请对应虚拟机会有两个账号root和admin,主要避免root账号权限过高造成脚本误操作。这里面问题…

免杀对抗—DLL劫持白加黑隐写分离EDRSyscall-hook

前言 今天讲点比较高端的东西—DLL反射注入,首先什么是DLL文件,简答来说就是程序为了实现某个功能而调用的文件。举个例子,某个代码想要实现某个功能是不是会调用一些封装好的函数,exe同样如此,想要实现某个功能就会调…

uniapp推送配置流程

Dcloud Dcloud注册账号 个推 了解即可 注册个推账号 ios配置流程 需配置含有推送的描述文件以及p8证书 配置推送证书 ios证书配置报技术错误(参数错误) TeamID-苹果开发者账号唯一的ID 安卓需配置多厂商 小米手机需要配置小米厂商 华为手机则需…

zookeeper全系列学习之分布式锁实现

文章目录 前言一、分布式锁的通用实现思路二、ZK实现分布式锁的思路三、ZK实现分布式锁的编码实现1、核心工具类实现2、测试代码编写线程安全问题复现使用上面封装的ZkLockHelper实现的分布式锁 优点缺点 总结 前言 就像上篇文章zookeeper全系列学习之统一配置获取说的&#x…

Uni-App-02

条件编译 条件编译概念 不同的运行平台终归有些专有的特性,无法实现跨平台完全兼容,例如:微信小程序导航栏右上角的关闭图标。 uni-app提供了一种“条件编译”机制,可以针对特定的平台编译执行特定的代码,否则不执行。…

【ArcGISPro】制作简单的ArcGISPro-AI助手

【python】AI Navigator的使用及搭建本机大模型_anaconda ai navigator-CSDN博客 【Python】AI Navigator对话流式输出_ai大模型流式输出效果(打字效果) python-CSDN博客 【C#】调用本机AI大模型流式返回_怎么实现调用本地大模型时实现流式输出-CSDN博客 【ArcGISPro】宣布推…

springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)

刚解决Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)没几天,又来一个新的,真是哭笑不得啊。 springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)https://blog.csdn.ne…

可编辑97页PPT | 制造企业数字化转型战略咨询及IT总体规划方案

荐言分享:制造企业数字化转型是当前市场环境下的必然趋势,旨在通过引入先进的信息技术,优化业务流程,提升运营效率,增强客户体验,实现可持续发展。这一转型过程涉及多个方面,需要综合考虑企业战…

计算机视觉中的点算子:从零开始构建

Hey小伙伴们!今天我们要聊的是一个非常基础但极其重要的计算机视觉技术——点算子(Point Operators)。点算子主要用于对图像的每个像素进行独立的处理,比如亮度调整、对比度增强、灰度化等。通过这些简单的操作,我们可…

001-Kotlin界面开发之Jetpack Compose Desktop学习路径

Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合…

小金标认证的头戴式蓝牙,QCY H3 Pro耳机,平价高音质的新选择

我发现如今市面上百元级的头戴式无线耳机都有非常出色的音质表现了,这其中国产品牌的表现尤为亮眼,与入耳式耳机相比,头戴式耳机拥有更大的发音单元和更包裹耳朵的耳罩设计,提供了更舒适稳固的佩戴体验,在音质和降噪效…

方法+数组

1. 方法 1. 什么是方法 方法定义: // []表示可写可不写[public] [static] type name ( [type formal , type formal , ...]){方法体;[return value ;] }[修饰符] 返回值类型 方法名称([参数类型 形参 , 参数类型 形参 ...]){方法体代码;[return 返回值…

大语言模型(LLM)入门级选手初学教程 II

模型架构 5.1 输入编码: i. 词元序列编码 Input Embedding Module ii. 位置编码(Position Embedding, PE),Transformer 的编码器结构本身无法识别序列中元素的顺序。 𝒙𝑡 𝒗𝑡 &#x1d491…

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、多头注意力机制 注意力机制简单示例:单个元素的情况简单示例:计算所有输入词元的注意力权重推广到所有输入序列词元: 注意力掩码代码实现多头注意力测试 注意力机制 简单示例…

数据库(31)——事务

事务 数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机…

Android 获取OAID

获取OAID 老规矩,直接上: implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid,还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

每日互动基于 Apache DolphinScheduler 从容应对ClickHouse 大数据入库瓶颈

引言 大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。 这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHous…