Redis面试篇1
1、为什么要用缓存?
- 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能,同时减轻了MySQL的读取压力。
2、什么是Redis?
- Redis是一个高性能的内存数据存储系统,也可以称为键值存储系统。它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,还提供了一些高级功能,如发布订阅、事务、Lua脚本等。Redis的特点是数据存储在内存中,可以快速读写,同时支持数据持久化到磁盘中。Redis还具有分布式特性,可以通过分片和赋值来实现高可用和高扩展性。
- Redis主要应用于缓存、会话存储、消息队列、排行榜等场景,具有快速、稳定、可靠等优点。由于其出色的性能和易用性,Redis已经成为最受欢迎的内存数据库之一。
3、使用Redis有哪些好处?
- 使用Redis有以下几个好处
- 高性能:Redis将数据存储在内存中,读写速度非常快,可以达到几十万甚至上百万QPS,特别适合高并发场景。
- 数据结构丰富:Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,可以满足不同场景下的需求。
- 持久化:Redis支持将数据持久化到磁盘中,以保证数据的安全性和可恢复性。
- 分布式特性:Redis支持分片和复制,可以实现高可用和高扩展性,支持数据在多台服务器之间的共享。
- 丰富的功能:Redis提供了许多高级功能,如事务、Lua脚本、发布订阅、过期策略等,可以满足更加复杂的业务需求。
4、说一下Redis有什么优点和缺点?
- 优点:
- 高性能:Redis使用C语言编写,采用单线程模型,将数据全部存储在内存中,加上异步I/O和时间驱动机制等优化,使得Redis在读写数据时的性能非常高。
- 数据结构丰富:Redis支持多种数据结构,如字符串、列表、哈希表、集合、有序集合等,这些数据结构可以满足不同的业务需求。
- 持久化机制:Redis提供了两张持久化机制,即RDB和AOF,可以将内存中的数据持久化到磁盘上,保证了数据的可靠性和安全性。
- 高可用性:Redis提供了主从复制和Sentinel机制,可以实现数据的高可用性和容错能力。
- 缺点:
- 内存受限:Redis将所有数据存储在内存中,如果数据量很大,会受到内存大小的限制,不适合存储大规模数据。
- 持久化机制可能带来性能损失:由于Redis提供了持久化机制,数据需要同步到磁盘上,真会导致写入性能的下降。
- 单线程模型可能存在瓶颈:尽管Redis采用了单线程模型,但是在极端情况下,可能会出现性能瓶颈,影响系统性能。
- 不支持多机数据共享:Redis不支持多机数据共享,需要使用其他技术如主从复制和Sentinel机制来实现高可用性和容错能力。
5、为什么要用Redis而不是用Memcached呢?
- Redis和Memcached都是流行的内存缓存系统,它们都可以在内存中快速读写数据,但是在一些方面有所不同,下面是Redis相较于Memcached的一些优点
- 数据结构更丰富:Redis支持多种数据结构,例如字符串、哈希、列表、集合、有序集合等,这些数据结构可以直接映射到实际的数据模型中,方便业务开发和数据处理。
- 多种持久化方式:Redis支持多种持久化方式,包括哦RDB(快照)和AOF(日志),这些持久化方式可以保证数据的安全性和可恢复性。
- 多种复制方式:Redis支持主从复制和哨兵模式,可以实现高可用和自动故障转移,而Memcached则需要通过第三方工具来实现高可用。
- 更好的性能:Redis在读写性能和并发能力上相较于Memcached更好,尤其是在多核CPU环境下,Redis可以充分利用多核的优势,提高系统的吞吐量。
- 更丰富的功能:Redis提供了更丰富的功能,如事务、Lua脚本、发布订阅、过期策略等,可以满足更加负载的业务需求。
6、说说Redis线程模型
- Redis采用单线程模型,也就是说所有的请求都由同一个线程来处理。这个线程主要负责网络IO、请求解析、命令执行和数据返回等业务。Redis内部通过事件驱动机制来实现异步IO操作,包括文件事件和时间事件。具体来说,Redis在启动时会创建一个事件处理器,来监听客户端套接字的读写事件,并在事件发生时触发响应的回调函数来处理事件。
- Redis单线程模型的优点是代码简洁、易于维护和调试,同时可以避免多线程并发带来的同步和锁的问题。此外,Redis还采用了多路复用机制,可以将多个客户端的请求合并到一起,减少IO操作的次数,提高系统的吞吐量和响应速度。
- 当然,Redis的单线程模型也存在一些缺点,如无法充分利用多核CPU的优势,容易受到单点故障的影响等。为了解决这些问题,Redis引入了多个进程和多个实例的方案,如主从复制、哨兵模式和集群模式等。这些方案可以提高系统的可用性和扩展性,同时保持了Redis简洁、高效的特点。
7、为什么Redis单线程模型效率也能这么高?
- C语言实现,效率高
- 纯内存操作
- 基于非阻塞的IO复用模型机制
- 单线程的话可以避免多线程的频繁上下文切换问题
- 丰富的数据结构,全程采用哈希结构,读取速度非常快,对数据存储进行了一些优化,例如压缩表、跳表等。
8、为什么Redis需要把所有数据放到内存中?
- Redis之所以将所有数据都放在内存中,是因为它设计的目标是高性能、高吞吐量和低延迟,而内存访问的速度比磁盘访问的速度快很多。如果数据存储在硬盘中,磁盘I/O会严重影响Redis的性能。而且Redis还提供了数据持久化功能,不用担心服务器重启对内存中数据的影响。
9、Redis的同步机制了解吗?
- Redis支持主从同步和从从同步,而在进行第一次主从同步时,需要现在主节点上执行BGSAVE命令,将当前内存中的数据持久化道磁盘上生成RDB文件,并且将主节点需要将后续修改操作记录到内存缓冲区中。在这个过程中,主节点会将生成的RDB文件发送给从节点,从节点接收并加载RDB文件到自己的内存中。加载完成后,从节点会通知主节点,将主节点在复制期间产生的命令同步到从节点,以此完成主从同步过程。
10、pipeline有什么好处,为什么要是用Pipeline?
- 使用Pipeline的好处在于可以将多次I/O往返的时间缩短为一次,从而提高Redis的吞吐量和性能。Pipeline允许客户端将多个Redis命令打包成一次请求发送给Redis服务器,Redis服务器收到后,将多个命令按顺序执行,并将执行结果按照请求的顺序返回给客户端,这样就避免了每次请求都要进行网络通信的开销。
相关文章:
Redis面试篇1
1、为什么要用缓存? 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能&…...
Debezium系列之:Debezium 3.0.0.Final发布
Debezium系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标MariaDB连接器的更改版本 11.4.3 支持MongoDB连接器的更改MongoDB sink connectorMySQL连接器的改变MySQL 9MySQL向量数据类型Oracle连接…...
一文解决jQuery表格插件DataTable导出PDF中文乱码问题
原因是默认字体不支持中文,需要更换字体。 详情官网:pdfmake 官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件 以下是详细操作: 重要前提:电脑上需要已安装nodejs 点击进入官网下载安装即可&a…...
使用pytorch进行迁移学习的两个步骤
1. 步骤及代码 迁移学习一般都会使用两个步骤进行训练: 固定预训练模型的特征提取部分,只对最后一层进行训练,使其快速收敛;使用较小的学习率,对全部模型进行训练,并对每层的权重进行细微的调节。 impor…...
ChatGPT相关参数示例
max_token 用于控制最大输出长度,若ChatGPT的回复大于max_tokens,则对输出结果进行截断。 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" ) response client.chat.completions.create(model"…...

OWASP发布大模型安全风险与应对策略(QA测试重点关注)
开放式 Web 应用程序安全项目(OWASP)发布了关于大模型应用的安全风险,这些风险不仅包括传统的沙盒逃逸、代码执行和鉴权不当等安全风险,还涉及提示注入、对话数据泄露和数据投毒等人工智能特有的安全风险。 帮助开发者和测试同学更…...

【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量
ArkTS是HarmonyOS开发的编程语言 ArkTS语法中的变量 【语法格式】: let 变量名: 类型 值 let:是定义变量的关键字类型: 值数据类型, 常用的数据类型 字符型(string)、数字型(number…...
UI自动化测试示例:python+pytest+selenium+allure
重点应用是封装、参数化: 比如在lib文件夹下,要存储封装好的方法和必要的环境变量(指网址等) 1.cfg.py:封装网址和对应的页面 SMP_ADDRESS http://127.0.0.1:8234SMP_URL_LOGIN f{SMP_ADDRESS}/login.html SMP_URL_DE…...
C/C++ 编程小工具
编写了 tools.h 和 tools.cpp,用于 Debug、性能测试、打印日志。 tools.h #ifndef TOOLS_H #define TOOLS_H#include <time.h> #include <fstream> #include <iostream> #include <random> #include <chrono> #include <vector&…...
第四十二章 使用 WS-ReliableMessaging
文章目录 第四十二章 使用 WS-ReliableMessaging从 Web 客户端发送一系列消息 第四十二章 使用 WS-ReliableMessaging IRIS 支持 WS-ReliableMessaging 规范的部分内容,如简介中所述。此规范提供了一种按顺序可靠地传递一系列消息的机制。本页介绍如何手动使用可靠…...

利士策分享,婚姻为何被称为大事?
利士策分享,婚姻为何被称为大事? 在历史的长河中,婚姻一直被视为人生中的头等大事,这一观念跨越时空,深深植根于各种文化和社会结构中。 古人为何将婚姻称为“大事”,这背后蕴含着丰富的社会、文化和心理寓…...

malloc源码分析之 ----- 你想要啥chunk
文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码,这里以glibc-2.29为例: void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…...

软考系统分析师知识点五:数据通信与计算机网络
前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:32天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…...

windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)
windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier) 目录 SSH简述、三种网络连接特点SSH简述局域网内连接内网穿透(…...

Python 工具库每日推荐【openpyxl 】
文章目录 引言Python Excel 处理库的重要性今日推荐:openpyxl 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动生成月度销售报告案例分析高级特性条件格式数据验证扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计…...

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?
当前,各大平台的本地生活服务业务日渐兴盛,提高创业者入局意向的同时,也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看,在创业者们所询问的众多本地生活服务项目中,通过…...

ML 系列:【13 】— Logistic 回归(第 2 部分)
文章目录 一、说明二、挤压方法三、Logistic 回归中的损失函数四、后记 一、说明 在这篇文章中,我们将深入研究 squashing 方法,这是有符号距离方法(第 12节)的一种很有前途的替代方案。squashing 方法通过提供增强的对异常值…...

45岁被裁员的程序员,何去何从?
在当今快速变化的技术行业,职业生涯的稳定性受到挑战。在45岁被裁员,对很多程序员来说,可能是一种惊慌失措的体验。然而,这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析,并提…...

云计算Openstack Neutron
OpenStack Neutron是OpenStack云计算平台中的网络服务组件,它为OpenStack提供了强大的网络连接功能。 一、基本概念 Neutron是一个网络服务项目,旨在为OpenStack提供网络连接。它允许用户创建和管理虚拟网络,包括子网、路由、安全组等&…...

PointNet++网络详解
数据集转换 数据集转换的意义在于将原本的 txt 点云文件转换为更方便运算的npy点云文件,同时,将原本的xyzrgb这 6 个维度转换为xyzrgbc,最后一个c维度代表该点云所属的类别。 for anno_path in anno_paths:print(anno_path)try:elements a…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...