分布式中间件-redis相关概念介绍

news2024/9/29 9:36:26

文章目录

    • 什么是redis?
      • 示意图
      • Redis的主要特点
      • Redis的主要用途
      • Redis的工作原理
      • Redis的持久化与备份
    • redis 6.x新增特性
      • 多线程数据加载
      • 客户端缓存
      • 新的 RESP 3 协议支持
      • ACL(Access Control List)功能
      • `新增数据类型`
      • 性能改进
      • 配置文件的改进
      • 其他改进
    • redis数据类型有哪些?
    • redis 部署模式有哪些?
    • redis常见问题
      • 缓存击穿(Cache Stampede)
      • 缓存雪崩(Cache Avalanche)
      • 缓存穿透(Cache Penetration)
      • 数据一致性问题
      • 内存管理问题
      • 并发竞争问题
      • 连接池的使用
    • 其他概念
      • 布隆过滤器
        • 工作原理
        • 特性
        • 应用场景
        • 注意事项
      • 一致性哈希算法
      • 示意图
        • 虚拟节点(Virtual Nodes)
        • 优点
        • 应用场景
      • 实现注意事项
    • 参考文献

什么是redis?

Redis(Remote Dictionary Server)是一个开源的、基于内存的、使用ANSI C语言编写的Key-Value数据库。它支持多种数据结构,并提供丰富的API,使其成为高性能的缓存、消息队列、实时分析等场景的理想选择。以下是关于Redis的详细介绍:

示意图

redis示意图

Redis的主要特点

  • 内存存储:Redis将数据存储在内存中,因此具有非常高的读取和写入性能。
  • 丰富的数据结构:支持字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等数据结构。
  • 持久化机制:支持两种持久化方式:RDB(Redis Database)和AOF(Append Only File)。
  • 分布式支持:通过集群方式支持分布式部署,提供分片、复制等功能。

Redis的主要用途

  • 缓存:Redis非常适合作为缓存系统,可以大幅提高系统的读写性能。
  • 消息队列:支持发布订阅机制,用于解耦系统的不同组件。
  • 分布式锁:提供原子性的操作,确保在分布式环境下对共享资源的互斥访问。
  • 会话存储:用于存储用户会话信息,提高网站的性能和扩展性。

Redis的工作原理

Redis采用单线程模型处理网络IO和键值对读写操作,避免了多线程带来的上下文切换和竞争条件问题。它使用异步I/O和事件驱动模型来提高并发读写的能力。

Redis的持久化与备份

Redis支持两种主要的持久化方式:RDBAOF。RDB通过生成数据快照文件存储到磁盘中,而AOF记录每一条收到的命令,确保数据的可靠性。
通过上述信息,我们可以看出Redis是一个功能强大、性能高、易用的数据存储和缓存解决方案,适用于多种应用场景。

redis 6.x新增特性

Redis 6.x 相对于之前的版本,引入了多项改进和新特性,增强了其性能、安全性以及功能性。以下是 Redis 6.x 中的一些重要新特性:

多线程数据加载

Redis 6.x 引入了一个实验性的多线程数据加载功能。这意味着在 Redis 启动时,可以从磁盘加载数据到内存的过程中利用多线程来加速这一过程。这对于大型数据库的启动时间有显著的改善作用。

客户端缓存

Redis 6.x 增加了客户端缓存的功能,允许客户端在本地缓存一些常用的数据。这样可以减少客户端与服务器之间的往返通信次数,从而减轻服务器的负载,提高访问速度和效率。

新的 RESP 3 协议支持

Redis 6.x 支持了新的 RESP 3 协议,该协议提供了更丰富的数据类型和更好的性能。RESP 3 协议相比之前的 RESP 2 协议,不仅增加了更多的数据类型和命令支持,还优化了数据传输的效率,提高了 Redis 的性能。

ACL(Access Control List)功能

Redis 6.x 引入了 ACL 功能,这是一项重要的安全特性。通过 ACL,管理员可以更精细地控制不同用户的权限,包括可以执行的命令和可以访问的键。这项功能增强了 Redis 的安全性,允许更复杂的访问控制策略。

新增数据类型

  • Bitmaps:虽然不是 Redis 6.x 新增的数据类型,但 Redis 6.x 对 Bitmaps 的支持更加完善,提供了更多针对 Bitmaps 的操作命令,使得在处理位图时更加方便。

性能改进

Redis 6.x 包含了一系列的性能改进,包括对内部数据结构的优化以及对命令处理流程的改进,旨在提高 Redis 的整体性能。

配置文件的改进

Redis 6.x 对配置文件进行了改进,使其更加易于理解和维护。例如,通过将一些默认配置项移到单独的配置文件中,简化了主配置文件的内容。

其他改进

除了上述特性外,Redis 6.x 还包含了一些其他改进,比如对 Lua 脚本的支持进行了增强,提供了更多的内置函数;对监控命令进行了改进,使得监控 Redis 实例的行为变得更加直观;以及其他一些小的特性和错误修复。

总的来说,Redis 6.x 的这些新特性使得 Redis 更加强大、灵活,并且更加适应现代分布式系统的需求。这些改进不仅提升了 Redis 的性能,还增强了其安全性和易用性。

redis数据类型有哪些?

Redis的数据类型主要包括以下几种:

  1. 字符串(String)

    • 最基本的数据类型,可以包含任何数据,如数字、字符串、二进制数据等。
    • 支持的操作包括设置值、获取值、追加、自增/自减等。
    • 应用场景:缓存、计数器、配置信息等。
  2. 哈希(Hash)

    • 哈希是一个键值对的集合,其中键是字符串,值也是字符串。哈希适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)。
    • 常用命令:HSET, HGET, HGETALL, HDEL, HEXISTS, HINCRBY, HKEYS, HLEN, HMGET, HMSET, HVALS等。
  3. 列表(List)

    • 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到头部(左边)或者尾部(右边)。
    • 常用命令:LPUSH, RPUSH, LPOP, RPOP, LINDEX, LLEN, LRANGE, LINSERT, LREM, LSET等。
  4. 集合(Set)

    • 集合是字符串类型的无序集合。它是通过哈希表实现的,可以做到添加,删除,查找的时间复杂度都是O(1)。
    • 常用命令:SADD, SREM, SMEMBERS, SISMEMBER, SDIFF, SINTER, SUNION, SCARD, SRANDMEMBER等。
  5. 有序集合(Sorted Set)

    • 有序集合和集合相似,但每个字符串元素都会关联一个浮点数类型的分数。元素的分数用来排序,如果两个成员有相同的分数,那么他们的排名按照字典序计算。
    • 常用命令:ZADD, ZREM, ZRANGE, ZREVRANGE, ZINCRBY, ZRANK, ZREVRANK, ZCARD, ZSCORE, ZCOUNT, ZUNIONSTORE, ZINTERSTORE等。
  6. 地理空间(Geospatial)

    • Redis从3.2版本开始增加了对地理空间位置的支持,允许存储地理坐标并执行地理位置查询。
    • 常用命令:GEOADD, GEODIST, GEOHASH, GEOPOS, GEORADIUS, GEORADIUSBYMEMBER等。
  7. HyperLogLog

    • HyperLogLog是一种用于估计集合基数的数据结构,它提供了非常高效的基数估计功能,但会牺牲一定的准确性。
    • 常用命令:PFADD, PFCOUNT, PFMERGE等。
  8. Bitmaps

    • 虽然Redis没有专门的Bitmaps数据类型,但是可以通过使用字符串类型来模拟位图操作。Bitmaps非常适合于处理大量的位级数据,如用户在线状态、日活跃用户统计等。
    • 常用命令:SETBIT, GETBIT, BITCOUNT, BITOP等。

这些复杂数据类型使得Redis能够处理更加丰富的数据操作需求,适用于各种复杂的应用场景。

redis 部署模式有哪些?

  • 单机部署
    单机部署是最简单的部署方式,适合开发测试环境或者负载较低的应用场景。在单机模式下,所有数据都存储在一个节点上,这种方式易于管理和配置。

  • 主从复制(Master-Slave Replication)
    主从复制是提高 Redis 可用性和扩展性的常用方法。在这种架构中,一个或多个从节点(slave)会实时地从主节点(master)复制数据。当主节点出现故障时,可以将其中一个从节点提升为新的主节点,以减少服务中断的时间。此外,从节点也可以用来处理只读请求,以此来分散主节点的压力。

  • 哨兵机制(Sentinel)
    哨兵是 Redis 提供的一种高可用性解决方案。哨兵(sentinel)是一组运行在独立进程中的程序,它们负责监控主从集群中的各个节点状态,在主节点发生故障时自动完成故障转移,即从从节点中选出一个新的主节点,并重新调整客户端的连接。

  • 集群模式(Cluster)
    Redis 集群允许用户水平扩展 Redis 的内存和吞吐量。集群通过分区数据到不同的节点上来实现数据的分布存储,同时支持数据的自动迁移重新平衡。每个节点只负责数据的一个子集,且集群本身支持一定数量的节点故障。需要注意的是,集群模式下的数据操作是分布式的,因此某些命令可能不可用或者行为会有所不同。

redis常见问题

缓存击穿(Cache Stampede)

当缓存中某个热点数据失效的一瞬间,大量的并发请求直接打到数据库上,导致数据库压力过大。解决方法通常是使用互斥锁(Mutex)或者设置一个过期时间很短的临时缓存项来避免这种情况。

缓存雪崩(Cache Avalanche)

如果大量缓存数据在同一时间失效,会导致后端数据库突然承受大量请求,从而引发系统崩溃。为了避免缓存雪崩,可以采取以下措施:

  • 使缓存的过期时间分布开,而不是集中在同一时间段;
  • 使用限流策略,比如漏桶算法或令牌桶算法;
  • 设置热点数据永不过期;
  • 采用双删策略,即数据先删除,然后延迟一段时间后再真正删除。

缓存穿透(Cache Penetration)

缓存穿透指的是查询一个不存在的数据,如果没有处理好,这个查询就会直接到达数据库,如果没有有效拦截机制的话,如果存在恶意攻击或者代码 bug,就可能对数据库造成过大压力。可以通过以下方式解决:

  • 对于不存在的数据也进行缓存,但设置较短的过期时间;
  • 使用布隆过滤器(Bloom Filter)提前过滤掉不存在的数据;
  • 在应用层增加校验,防止恶意攻击。

数据一致性问题

当缓存和数据库中的数据不一致时,可能导致业务逻辑错误。为了保证数据一致性,可以采用以下方法:

  • 双写一致性,即更新缓存和数据库时,保证两者的顺序一致;
  • 缓存击穿和雪崩预防机制;
  • 使用消息队列来异步更新缓存;
  • 利用分布式事务或最终一致性来保证数据一致性。

内存管理问题

Redis 是内存数据库,所以内存管理非常重要。常见的内存管理问题有:

  • 内存溢出:当 Redis 达到最大内存限制时,需要合理配置 Redis 的内存策略(如 LRU 或 LFU),并定期检查和清理不再使用的缓存数据;
  • 内存碎片:长时间运行后可能会产生内存碎片,需要定期进行内存优化或重启 Redis 实例;
  • 内存占用过高:监控内存使用情况,合理设置 key 的过期时间(TTL),定期清理不必要的数据。

并发竞争问题

当多个并发请求试图修改同一个缓存条目时,可能会出现并发竞争的问题。可以使用 Redis 的原子操作(如 INCRDECR)、Lua 脚本或者分布式锁来解决这个问题。

连接池的使用

在高并发场景下,频繁创建和销毁 Redis 连接会造成不必要的性能损耗。使用连接池可以复用连接,减少系统的整体开销。
解决上述问题时,需要根据具体的业务场景和技术栈来综合考虑,确保系统稳定可靠的同时也要兼顾性能和成本。

其他概念

布隆过滤器

布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,它用于判断一个元素是否在一个集合中。布隆过滤器的特点是可以非常快速地检测一个元素是否存在于集合中,但是它的判断不是绝对准确的——可能存在一定的误报率(false positive rate),但是不会有误删(false negative),也就是说,如果布隆过滤器说某个元素不在集合中,那它确实不在;但如果它说某个元素在集合中,那这个判断可能是错误的。

工作原理

布隆过滤器由一个很长的二进制向量(bit array)和一系列随机映射函数(hash functions)组成。当一个元素被加入到过滤器时,它会被 k 个不同的哈希函数处理,每个哈希函数都会给出一个位置,这个位置上的比特位将被设置为 1。当需要查询一个元素是否存在于集合中时,同样的 k 个哈希函数会被应用到该元素上,如果所有的比特位都是 1,那么这个元素“可能”存在于集合中;如果其中任何一个比特位是 0,那么可以确定该元素肯定不在集合中。

特性
  1. 空间效率:相比其他数据结构,布隆过滤器可以使用更少的空间来表示一个集合。
  2. 插入和查询速度快:因为布隆过滤器的主要操作是位操作,所以它的速度非常快。
  3. 误报率:布隆过滤器允许有一定概率的误报,但不会有误删的情况。误报率受滤波器大小、哈希函数的数量以及插入的元素数量的影响。
应用场景

布隆过滤器适用于那些对误报有一定容忍度的应用场景,常见的应用场景包括:

  • 网络爬虫:用来判断网页是否已经被抓取。
  • 数据库系统:在数据库索引中,可以用来判断某条记录是否存在,以减少磁盘 I/O 操作。
  • 缓存系统:如 Redis 中的布隆过滤器插件,用来判断一个键是否存在,以减少不必要的缓存查找。
  • 垃圾邮件过滤:用来标记已知的垃圾邮件地址。
注意事项

使用布隆过滤器时需要注意以下几点:

  • 一旦某个元素被加入到布隆过滤器中,就不能再将其删除,除非重建整个过滤器。
  • 误报率随着加入元素数量的增加而增加,因此需要合理估计最大元素数量和分配足够的空间来保持较低的误报率。
  • 选择合适的哈希函数数目和滤波器大小对于控制误报率至关重要。
    总之,布隆过滤器是一个非常有用的工具,尤其是在需要高效存储和查询大量数据的情况下。但是,在使用时也需要考虑到它的局限性和适用场景。

一致性哈希算法

一致性哈希算法(Consistent Hashing)是一种特殊的哈希算法,设计目的是为了在分布式环境中解决数据分片(sharding)和负载均衡的问题。一致性哈希能够有效地应对节点动态变化的情况,比如节点的添加(scale up)或移除(scale down),并且能够尽量减少数据迁移的成本。这使得一致性哈希非常适合用于构建可伸缩的分布式系统,如缓存系统、负载均衡器、分布式存储等。

示意图

一致性哈希算法#### 工作原理
一致性哈希的基本思想是在一个虚拟的圆环上放置数据节点,并将数据项通过哈希运算映射到这个圆环上。每个节点也被哈希到圆环上的某个位置。数据项存储在它映射到的位置顺时针方向上最近的那个节点上。

  • 具体步骤如下:

    1. 计算节点的哈希值:将每个节点的名字(或其他标识符)通过哈希函数转换成一个整数,然后把这个整数映射到一个固定大小的圆环上。
    2. 计算数据的哈希值:同样地,将每个数据项(key)通过相同的哈希函数转换成一个整数,并映射到圆环上。
    3. 定位数据所在节点:对于每一个数据项,找到它在圆环上顺时针方向上的第一个节点,这个节点就是数据应该存储的地方。
虚拟节点(Virtual Nodes)

为了进一步提高负载均衡的效果,一致性哈希引入了虚拟节点的概念。每个物理节点可以在圆环上占据多个位置,这些位置称为虚拟节点。这样做可以增加哈希环上的节点数量,从而更均匀地分布数据。

优点
  1. 数据迁移最小化:当系统中添加或移除节点时,只有少量的数据需要被重新分布,大多数数据可以保持不变。
  2. 可预测性:即使在节点数量发生变化时,一致性哈希算法也能提供一种相对稳定的数据映射方式。
  3. 负载均衡:通过虚拟节点可以实现更好的负载均衡。
应用场景

一致性哈希算法广泛应用于各种分布式系统中,包括但不限于:

  • 分布式缓存:如 Amazon Dynamo 和 Memcached 都采用了类似的技术。
  • 负载均衡:用于分配请求到不同的服务器。
  • 分布式文件系统:如 Google 的 Bigtable 和 Apache 的 Cassandra。

实现注意事项

虽然一致性哈希具有很多优点,但在实际应用中也需要考虑一些问题,例如:

  • 当节点较少时,哈希环上的分布可能会不均匀,导致某些节点负载过重。
  • 节点的添加或移除仍然会对部分数据造成影响,需要权衡利弊。
  • 选择合适的哈希函数以及合理的虚拟节点数量也是实现过程中需要注意的问题。
    一致性哈希提供了一种优雅的方式来处理分布式系统中的数据分布问题,特别是在需要动态调整节点数量的情况下,能够有效地减少数据迁移带来的开销。

参考文献

  • 如果英文不好,可以点击这里,获得更加详细的说明信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL:表中的数据类型

数值类型 int类型 int类型包含以下五种: 类型大小tinyint1 bytesmallint2 bytemediumint3 byteint4 bytebigint8 byte 表t1的num列的类型就是tinyint,我们尝试对其插入数据,来测试其范围。tinynt占1 byte,那么就可以表示256个数…

opengl学习6

理解glVertexAttribPointer()函数 OpenGL glVertexAttribPointer()函数解析-CSDN博客 难理解的是最后一个参数。 这个参数指明了,顶点属性的数据从哪里获取。 # 如果是(void*) 0,则表示数据从已绑定的VBO中获取,从…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

《 C++ 修炼全景指南:六 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…

【成品论文】2024年华为杯研赛D题成品论文获取入口

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击文末的卡片&#xff0c;那是获取资料的入口! 现分享2023年华为杯研赛D题成品论文&#xff08;部分&#xff09;&#xff0c;供大家学习&#xff1a; 题 目&#xff1a; ____区域双碳目标与路径规划研究 …

MySQL之安装与基础知识

目录 一&#xff1a;在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二&#xff1a;MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器&#xff0c;数据库&#xff0c;表关系及使用案例 4…

function uuid_generate_v4()不存在

说明&#xff1a;记录一次使用postgresql函数错误&#xff0c;如下&#xff1a; 项目中的一个SQL用到了uuid_generate_v4()函数生成uuid作为记录的主键&#xff0c;结果报上面这个错误&#xff1b; 分析&排查 首先&#xff0c;我连接上了数据库&#xff0c;在数据库里敲下…

《论网络安全体系设计》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化的普及&#xff0c;计算机网络已经在各行各业得到了广泛的应用。目前&#xff0c;绝大多数业务处理几乎完全依赖计算机和网络执行&#xff0c;各种重要数据如政府文件、工资档案、财务账目和人事档案等均依赖计算机和网络进行存储与传输。另一方面&…

ThreeJs创建圆环

ThreeJs除了创建基本的长方体&#xff0c;球形&#xff0c;圆柱等几何体&#xff0c;也可以创建一些特殊的几何体&#xff0c;比如圆环&#xff0c;多边体&#xff0c;这节就来讲怎么用Threejs绘制出圆环。首先依然是要创建出基础的组件&#xff0c;包括场景&#xff0c;相机&a…

如何理解Configurational entropy

Configurational entropy 是热力学和统计力学中的一个重要概念&#xff0c;它描述的是系统中由于其微观状态排列&#xff08;即配置&#xff09;导致的不确定性或混乱程度。不同于热力学中的热熵&#xff08;thermal entropy&#xff09;&#xff0c;它特指那些与系统中的粒子、…

8.6小波变换(Wavelet Transform)边缘检测

实验原理 由于OpenCV本身并不直接支持小波变换&#xff08;Wavelet Transform&#xff09;&#xff0c;我们需要借助一些技巧来实现它。一种常见的方法是利用离散余弦变换&#xff08;DCT&#xff09;或离散傅立叶变换&#xff08;DFT&#xff09;来近似实现小波变换的功能。但…

Spring的核心思想

目录 一、Spring要解决的问题 二、Spring的核心结构 三、核心思想 3.1.1 什么是IOC 3.1.2 IOC解决的问题&#xff1a;耦合 3.1.3 IOC和DI的区别 3.2.1 什么是AOP 3.2.2 AOP解决的问题&#xff1a;耦合 3.2.3 为什么叫做面向切面编程 一、Spring要解决的问题 问题1&am…

道路检测-目标检测数据集(包括VOC格式、YOLO格式)

道路检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1nDwTmZxH_BQrVTj9MzUgDg?pwd3zh7 提取码&#xff1a;3zh7 数据集信息介绍&#xff1a; 共有 3321张图像和一一对应的标注文件 标注文…

Excel 国产化替换新方案

前言 在当前数字化转型和信创&#xff08;信息技术应用创新&#xff09;战略背景下&#xff0c;企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件&#xff0c;SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…

衡石分析平台使用手册-通用配置文档

配置文件​ 配置文件中存放 HENGSHI SENSE 的配置参数&#xff0c;可以通过修改配置文件来改变 HENGSHI SENSE 的服务方式。 配置文件说明​ 配置文件存放在 conf 路径下&#xff0c;包含 hengshi-sense-env.sh 和 engine-segment-hosts 两个文件。其中 engine-segment-host…

Qt与VS打包命令

一 QT 将程序编译生成的可执行文件&#xff08;.exe&#xff09;放到一个干净的文件夹。找到QT安装目录&#xff0c;进入编译版本的bin目录&#xff0c;找到windeployqt.exe&#xff0c;在文件访问路径栏的最前边&#xff0c;添加“cmd ”进入控制台。控制台命令&#xff1a; …

K8s 简介以及详细部署步骤

Kubernetes 简介 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 1、传统部署 互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源…

【Java面试】第七天

&#x1f31f;个人主页&#xff1a;时间会证明一切. 目录 有三个线程T1,T2,T3如何保证顺序执行&#xff1f;依次执行start方法使用join使用CountDownLatch使用线程池使用CompletableFuture Spring Bean的生命周期是怎么样的&#xff1f;Autowired和Resource的关系&#xff1f;相…

使用Python生成多种不同类型的Excel图表

目录 一、使用工具 二、生成Excel图表的基本步骤 三、使用Python创建Excel图表 柱形图饼图折线图条形图散点图面积图组合图瀑布图树形图箱线图旭日图漏斗图直方图不使用工作表数据生成图表 四、总结 Excel图表是数据可视化的重要工具&#xff0c;它通过直观的方式将数字信…