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.rhkb.cn/news/461910.html

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

相关文章

[POI2014] PTA-Little Bird(单调队列优化 DP)

luogu 传送门https://www.luogu.com.cn/problem/P3572 解题思路 先设 表示到 的最小劳累值。 很容易得出转移: 其中 由 和 的大小关系决定,并且 。 很显然,直接暴力是 的,会超时。 于是,考虑优化。 我们发现…

如何在Linux系统中使用Apache HTTP Server

如何在Linux系统中使用Apache HTTP Server Apache简介 安装Apache 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Apache服务 验证Apache是否正在运行 访问Apache默认页面 配置Apache虚拟主机 创建虚拟主机配置文件 示例虚拟主机配置 创建网站根目录 准备静态网站内…

ISME Comm | 西南大学时伟宇团队在功能基因水平揭示植被演替过程中磷限制对土壤微生物碳代谢潜力的抑制作用机制

本文首发于“生态学者”微信公众号! 植被群落长期演替过程中,生态系统普遍受养分限制,微生物群落代谢功能在生态系统物质循环中尤为关键。西南大学时伟宇教授团队联合国内外学者,在功能基因水平,将微生物群落功能纳入生…

Unity控制物体透明度的改变

目录标题 效果图代码调用注意事项 效果图 代码 注意:在控制全部的模型进行透视时,已经隐藏的子物体仍然要处理。 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class FadeModel {priva…

工业网络监控中的IP保护与软件授权革新

未来的智能工厂离不开稳定而高效的通信网络,这些网络在支撑生产流程的同时,也面临着复杂的管理与安全挑战。PROCENTEC推出了一系列硬件和软件产品,如Atlas、Mercury和Osiris,以提供全面的网络监控和故障排除能力。然而&#xff0c…

springboot 整合 抖音 移动应用 授权

后端开发,因为没有JavaSDK,maven依赖,用到的是API接口去调用 抖音API开发文档 开发前先申请好移动应用,抖音控制台-移动应用 之后还需要开通所有能开通的能力 拿到应用的 clientKey 和 clientSecret,就可以进入开发了 …

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志,在实际项目中一般还会记录操作日志,包括操作类型、操作时间、操作员、管理员IP、操作原因等等(一般叫审计)。 操作日志一般保存在数据库,方便管理员查询。通常的做法在每个…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召,视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽,视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

二十八、Python基础语法(面向对象-下)

一、self 从函数的语法上来看, self 是形参 , 是一个普通的参数,那么在调用的时候,就需要传递实参值。从调用上看, 我们没有给 self 这个形参传递实参值, 但是 Python 解释器会自动的将调用这个方法的对象,作为实参值传递给 self。 class Dog:def eat(self):print…

【Leecode】Leecode刷题之路第37天之解数独

题目出处 37-解数独-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 37-解数独-官方解法 方法1:回溯 思路: 代码示例:(Java) p…

【golang/navmesh】使用recast navigation进行寻路

目录 说在前面安装使用可视化 说在前面 go version:1.20.2 linux/amd64操作系统:wsl2detour-go版本:v0.2.0github:这里,求star! 安装 使用go mod安装即可go get github.com/o0olele/detour-go使用 使用场景模型构建n…

qt QFormLayout详解

QFormLayout 是 Qt 框架中用于创建表单布局的一个类,适合于将标签和输入控件整齐地排列在一起。它可以帮助开发者轻松构建用户输入界面,尤其是在处理表单时。 QFormLayout以两列的形式展示其子项,常用于创建“标签-字段”对的布局。其中&…

电脑小白必看|电脑安装常用软件简单小技巧

前言 最近同事换了新电脑,问我怎么下载常用软件? 我反问了一下:什么常用软件呢? 她说:微信、QQ、钉钉、酷狗、wps这种类型的软件。 哦豁,那其实很简单,但很多人还是没学会。小白之前分享过一…

RocketMQ 消息消费失败的处理机制

在分布式消息系统中,处理消费失败的消息是非常关键的一环。 RocketMQ 提供了一套完整的消息消费失败处理机制,下面我将简要介绍一下其处理逻辑。 截图代码版本:4.9.8 步骤1 当消息消费失败时,RocketMQ会发送一个code为36的请求到…

数据结构算法学习方法经验总结

DSA:Data Structures, Algorithms, and Problem-Solving Techniques 三大核心支柱 一次学习一个主题,按照如下顺序学习 如何开始学习新的主题 学习资源 https://www.youtube.com/playlist?listPLDN4rrl48XKpZkf03iYFl-O29szjTrs_O (Algorithms) https://ww…

Linux 操作系统的诞生与发展历程

目录 背景与起源 诞生过程 特点与影响 背景与起源 历史背景: 1980年代末至1990年代初,计算机操作系统市场主要由商业软件主导,如DOS、Windows以及Unix的各种版本。然而,这些系统往往价格昂贵,且源代码不开放&#…

第三届北京国际水利科技博览会将于25年3月在国家会议中心召开

由中国农业节水和农村供水技术协会、北京水利学会、振威国际会展集团等单位联合主办的第三届北京国际水利科技博览会暨供水技术与设备展(北京水利展)将于2025年3月31日至4月2日在北京•国家会议中心举办! 博览会以“新制造、新服务、新业态”…

贪心算法习题其二【力扣】【算法学习day.19】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

Linux中NFS配置

文章目录 一、NFS介绍1.1、NFS的工作流程1.2、NFS主要涉及的软件包1.3、NFS的主要配置文件 二、安装NFS2.1、更新yum2.2、安装NFS服务2.3、配置NFS服务器2.4、启动NFS服务2.5、配置防火墙(如果启用了防火墙,需要允许NFS相关的端口通过)2.6、生…

Docker | 将本地项目发布到阿里云的实现流程

发布到阿里云 本地镜像发布到阿里云流程具体流程1. docker commit 生成新镜像文件2. 查看镜像3. 阿里云开发者平台选择控制台,进入容器镜像服务,选择个人实例创建命名空间仓库名称进入管理界面获得脚本推送到阿里云 补充: docker tag 命令基本…