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…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...