当前位置: 首页 > article >正文

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.kler.cn/a/374629.html

相关文章:

  • 【二分查找】——搜索二维矩阵#力扣hot100
  • 神经网络进行波士顿房价预测
  • 【网络安全 | 漏洞挖掘】逻辑漏洞+无限制爆破实现业务瘫痪
  • 聆听用户声音的3个方法,挖掘客户真实潜在需求
  • sqoop问题汇总记录
  • Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(二)编辑BPLibrary.h中的枚举及结构体
  • Oracle 大表添加索引的最佳方式
  • 深度学习:YOLO v1网络架构、损失值及NMS极大值抑制
  • DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器
  • 【MySQL】 运维篇—安全管理:防止SQL注入与其他安全威胁
  • 数据库开发
  • Android Studio Dolphin 下载、安装与配置教程
  • 实现RPC接口的demo记录
  • 从传感器到清洁力提升,灵途科技推动家电智能化发展
  • Linux的硬盘管理
  • AI人工智能电话机器人如何使用效果最好
  • Android里的协程( Coroutine)理解
  • 快速上手机器学习-朴素贝叶斯
  • .NET Core WebApi第7讲:项目的发布与部署
  • opencv训练识别狗的分类器数据集
  • 3D人体建模的前沿探索:细数主流模型与技术进展
  • haue数据库原理第一次实验
  • ES6面试题:(第三天)
  • vscode 安装教程
  • Python 变量在函数中的作用域
  • 富格林:拆穿欺诈套路平稳出金