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…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
本地部署drawDB结合内网穿透技术实现数据库远程管控方案
文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下,数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统,还是初创…...
旋量理论:刚体运动的几何描述与机器人应用
旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比,旋量理论通过螺旋运动的概念统一了旋转和平移,在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观,而且计算…...
MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool
在当今数据驱动的时代,数据库作为数据存储与管理的核心,其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库,在众多应用场景中发挥着关键作用。在这篇博客中,我将围绕 MySQL 数据库的核心知识展开,涵盖事务及…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
【芯片仿真中的X值:隐藏的陷阱与应对之道】
在芯片设计的世界里,X值(不定态)就像一个潜伏的幽灵。它可能让仿真测试顺利通过,却在芯片流片后引发灾难性后果。本文将揭开X值的本质,探讨其危害,并分享高效调试与预防的实战经验。 一、X值的本质与致…...
