Redis设计与实现之慢查询日志

2023-12-19

目录

一、慢查询日志

1、相关数据结构

2、慢查询日志的记录

3、慢查询日志的操作

4、如何设置慢查询的阈值?

5、如何查看慢查询日志的内容?

6、如何分析慢查询日志以找出性能瓶颈?

7、如何优化慢查询以提高Redis的性能?

8、慢查询日志对Redis的性能有何影响?

9、是否可以禁用慢查询日志?

10、如何定期清理慢查询日志以减少磁盘空间占用?

11、在集群模式下如何处理慢查询日志?

二、小结


一、慢查询日志

慢查询日志是 Redis 提供的一个用于观察系统性能的功能,这个功能的实现非常简单,这里我们也简单地讲解一下。

本章先介绍和慢查询功能相关的数据结构和变量,然后介绍 Redis 是如何记录命令的执行时间,以及如何为执行超过限制事件的命令记录慢查询日志的。

1、相关数据结构

每条慢查询日志都以一个 slowlog.h/slowlogEntry 结构定义:

typedef struct slowlogEntry { 
    // 命令参数
    robj **argv; 
    // 命令参数数量
    int argc;
    // 唯一标识符
    long long id; /* Unique entry identifier. */
    // 执行命令消耗的时间,以纳秒(1 / 1,000,000,000 秒)为单位
    long long duration; /* Time spent by the query, in nanoseconds. */
    // 命令执行时的时间
    time_t time; /* Unix time at which the query was executed. */
} slowlogEntry;

记录服务器状态的 redis.h/redisServer 结构里保存了几个和慢查询有关的属性:

struct redisServer { 
    // ... other fields
    // 保存慢查询日志的链表 list 
    *slowlog; /* SLOWLOG list of commands */
    // 慢查询日志的当前 id 值 
    long long slowlog_entry_id;/* SLOWLOG current entry ID */
    // 慢查询时间限制
    long long slowlog_log_slower_than; /* SLOWLOG time limit (to get logged) */
    // 慢查询日志的最大条目数量
    unsigned long slowlog_max_len; /* SLOWLOG max number of items logged */ 
    // ... other fields
};

slowlog 属性是一个链表,链表里的每个节点保存了一个慢查询日志结构,所有日志按添加时 间从新到旧排序,新的日志在链表的左端,旧的日志在链表的右端。

slowlog_entry_id 在创建每条新的慢查询日志时增一,用于产生慢查询日志的 ID (这个 ID 在执行 SLOWLOG RESET 之后会被重置)。

slowlog_log_slower_than 是用户指定的命令执行时间上限,执行时间大于等于这个值的命令 会被慢查询日志记录。

slowlog_max_len 慢查询日志的最大数量,当日志数量等于这个值时,添加一条新日志会造成 最旧的一条日志被删除。

下图展示了一个 slowlog 属性的实例:

2、慢查询日志的记录

在每次执行命令之前,Redis 都会用一个参数记录命令执行前的时间,在命令执行完之后,再 计算一次当前时间,然后将两个时间值相减,得出执行命令所耗费的时间值 duration ,并将 duration传给 slowlogPushEntryIfNeed 函数。

如果 duration 超过服务器设置的执行时间上限 server.slowlog_log_slower_than 的话, slowlogPushEntryIfNeed 就会创建一条新的慢查询日志,并将它加入到慢查询日志链表里。可以用一段伪代码来表示这个过程:

def execute_redis_command_with_slowlog(): 
    # 命令执行前的时间
    start = ustime() 
    # 执行命令
    execute_command(argv, argc)
    # 计算命令执行所耗费的时间 
    duration = ustime() - start
    if slowlog_is_enabled: 
    slowlogPushEntryIfNeed(argv, argc, duration)

def slowlogPushEntryIfNeed(argv, argc, duration)
    # 如果执行命令耗费的时间超过服务器设置命令执行时间上限 
    # 那么创建一条新的 slowlog
    if duration > server.slowlog_log_slower_than:
        # 创建新 slowlog
        log = new slowlogEntry()
        # 设置各个域
        log.argv = argv
        log.argc = argc
        log.duration = duration
        log.id = server.slowlog_entry_id log.time = now()
        # 将新 slowlog 追加到日志链表末尾 
        server.slowlog.append(log)
        # 更新服务器 
        slowlog server.slowlog_entry_id += 1

3、慢查询日志的操作

针对慢查询日志有三种操作,分别是查看、清空和获取日志数量:

  • 查看日志:在日志链表中遍历指定数量的日志节点,复杂度为 O(N) 。

  • 清空日志:释放日志链表中的所有日志节点,复杂度为 O(N) 。

  • 获取日志数量:获取日志的数量等同于获取 server.slowlog 链表的数量,复杂度为 O(1) 。

4、如何设置慢查询的阈值?

在Redis中,可以通过设置 slowlog-log-slower-than 参数来设置慢查询的阈值。

该参数的默认值是10000,单位是微秒。这意味着,如果一个查询的执行时间超过10毫秒,则会被记录在慢查询日志中。

你可以通过以下方式来设置慢查询的阈值:

  1. 修改Redis配置文件redis.conf,在文件中找到 slowlog-log-slower-than ,修改其值为你希望的慢查询阈值,例如:

    slowlog-log-slower-than 5000
    

    这里将慢查询阈值设置为5毫秒。

  2. 或者,在Redis启动后,使用命令 CONFIG SET 来修改该参数的值。例如:

    CONFIG SET slowlog-log-slower-than 5000
    

    这里同样将慢查询阈值设置为5毫秒。

请注意,修改Redis参数后,需要重启Redis服务才能生效。

5、如何查看慢查询日志的内容?

要查看Redis的慢查询日志的内容,需要按照以下步骤进行操作:

  1. 打开Redis的配置文件redis.conf,查找以下配置项:

    slowlog-log-slower-than 10000
    slowlog-max-len 128
    

    slowlog-log-slower-than 配置项定义了超过多少微秒的查询会被记录到慢查询日志中,默认值是10000微秒(10毫秒)。

    slowlog-max-len 配置项定义了慢查询日志的最大长度,默认值是128。

  2. 检查Redis服务器是否启用了慢查询日志功能。在Redis的命令行界面上执行 CONFIG GET slowlog-log-slower-than 命令,如果返回的值大于0,则表示慢查询日志功能已启用。

  3. 检查慢查询日志的长度。在Redis的命令行界面上执行 SLOWLOG LEN 命令,返回的值表示当前慢查询日志中记录的慢查询数量。

  4. 查看慢查询日志的内容。在Redis的命令行界面上执行 SLOWLOG GET 命令,可以返回所有慢查询日志的详细信息,包括查询命令、执行时间等。

注意:慢查询日志是以队列的形式存储在内存中的,当队列长度达到了设置的最大长度时,新的慢查询日志会覆盖最早的日志。如果要持久化保存慢查询日志,可以使用Redis的持久化功能将日志写入磁盘文件。

6、如何分析慢查询日志以找出性能瓶颈?

要分析Redis慢查询日志以找出性能瓶颈,可以按照以下步骤进行:

  1. 打开Redis配置文件(redis.conf)并启用慢查询日志记录。找到 slowlog-log-slower-than 配置项并设置一个合适的阈值,表示执行时间超过该阈值的命令将被记录为慢查询。例如,将阈值设置为10000,表示执行时间超过10毫秒的命令将被记录。

  2. 重启Redis服务使配置生效。

  3. 使用Redis的 SLOWLOG GET 命令可以获取慢查询日志信息。可以通过指定参数 SLOWLOG GET n 来获取最近的n条慢查询日志。

  4. 分析慢查询日志时,可以关注以下几点:

    • 查看命令执行时间(duration)是否超过预期。可以根据具体需求来判断哪些命令执行时间太长,从而找出潜在的性能瓶颈。

    • 查看命令的执行次数(count)以及执行时间总和(total duration)。这可以帮助你确定哪些命令对Redis的性能影响最大。

    • 查看命令的调用者(client name)和客户端地址(client address)。这可能有助于定位哪些客户端对Redis的性能产生较大负担。

    • 查看命令的参数,特别是那些可能会导致性能问题的参数。例如,使用 KEYS 命令获取所有键可能会导致性能问题,可以考虑改为使用 SCAN 命令。

  5. 如果发现某些命令执行时间过长,可以通过以下方式来优化性能:

    • 使用Redis的管道(pipeline)机制批量执行多个命令,减少网络开销和服务器响应时间。

    • 使用Redis的事务(transaction)机制将多个命令包装在一个事务中,减少多次网络往返的开销。

    • 使用Redis的持久化功能,将一些频繁访问的数据加载到内存中,减少磁盘IO开销。

    • 合理设计数据结构和命令调用方式,避免不必要的命令调用和数据转换操作。

通过以上步骤,你可以分析Redis慢查询日志并找出性能瓶颈,从而优化Redis的性能。

7、如何优化慢查询以提高Redis的性能?

要优化慢查询以提高Redis的性能,可以采取以下几个步骤:

  1. 使用正确的数据结构:Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。根据实际需求选择合适的数据结构,以便更高效地使用Redis。

  2. 合理设置索引:对于需要频繁查询的数据,可以考虑使用Redis的有序集合或哈希表来建立索引,以加快查询速度。

  3. 使用批量操作:Redis支持批量操作,如批量获取和批量设置操作等。通过减少网络请求次数,可以提高性能。尽量将多个操作合并到一次请求中。

  4. 避免频繁的数据库查询:如果Redis作为缓存层使用,尽量避免频繁的数据库查询,可以通过设置合适的过期时间和适当的缓存策略来减轻数据库负载。

  5. 使用Pipeline技术:Redis的Pipeline技术可以将多个命令打包成一个批处理命令,减少网络开销。通过使用Pipeline技术,可以大幅度提高性能。

  6. 适当使用持久化功能:Redis支持持久化功能,可以将数据写入磁盘,以防止数据丢失。但是,持久化功能会对性能产生一定影响。因此,需要根据实际需求,选择是否启用持久化功能。

  7. 配置合理的内存策略:根据实际情况,合理配置Redis的最大内存限制和数据淘汰策略,以充分利用有限的内存资源。

  8. 配置合理的网络参数:根据实际网络环境,优化网络参数,如TCP连接数、超时时间等,以提高网络通信的性能。

  9. 使用连接池:为了减少每次请求时的连接建立和断开开销,可以使用连接池技术,提前创建连接并重复利用。

  10. 使用集群模式:当单机Redis无法满足需求时,可以考虑使用Redis集群模式,将数据分片存储在多个Redis节点上,以提高性能和可伸缩性。

通过以上优化措施,可以显著提高Redis的性能,并提升系统的整体运行效率。

8、慢查询日志对Redis的性能有何影响?

慢查询日志可以对Redis的性能产生一定影响,主要体现在以下几个方面:

  1. I/O开销:启用慢查询日志会增加对磁盘的写入操作,增加了I/O开销。尤其是在高并发读写场景下,频繁写入慢查询日志可能会影响Redis的性能。

  2. CPU开销:Redis在记录慢查询日志时需要对查询进行解析和分析,这会增加CPU的使用量。对于高负载的Redis服务器来说,频繁记录慢查询日志可能会竞争CPU资源,导致性能下降。

  3. 空间占用:慢查询日志会占用一定的存储空间,特别是在长期记录慢查询日志的情况下,可能会占用较大的磁盘空间。

为了减轻对Redis性能的影响,可以采取以下措施:

  1. 适量记录:根据实际情况设置阈值,只记录超过一定执行时间的慢查询,避免记录过多的查询。

  2. 异步记录:将慢查询日志记录操作异步化,通过将慢查询信息写入队列或发送到其他存储系统,减少对Redis主线程的阻塞。

  3. 定期清理:定时清理过期的慢查询日志,避免占用过多的存储空间。

总之,慢查询日志可以提供有价值的性能分析信息,但在启用的同时需注意对性能的影响,合理设置慢查询日志的记录策略。

9、是否可以禁用慢查询日志?

是的,Redis可以禁用慢查询日志。你可以通过修改Redis的配置文件(redis.conf)来禁用慢查询日志的记录。找到配置文件中的 slowlog-log-slower-than 指令,将其值设置为-1即可禁用慢查询日志。然后重新启动Redis服务器使修改生效。

10、如何定期清理慢查询日志以减少磁盘空间占用?

Redis没有内置机制来自动清理慢查询日志。如果你希望定期清理慢查询日志以减少磁盘空间占用,可以考虑使用以下方法:

  1. 使用Redis的 SLOWLOG RESET 命令手动清空慢查询日志。执行该命令后,慢查询日志将被清空。

  2. 使用外部脚本或工具定期执行Redis的 SLOWLOG RESET 命令。你可以编写一个脚本来定期执行该命令,例如使用Cron定时任务或其他调度工具。

  3. 在Redis配置文件中设置 slowlog-max-len 参数来限制慢查询日志的数量。该参数指定了慢查询日志的最大长度,默认为128条。当慢查询日志达到最大长度时,旧的慢查询日志将被自动删除。

请注意,清理慢查询日志可能会导致你失去一些有用的诊断信息。如果你需要保留慢查询日志进行性能分析和问题排查,可以将日志定期备份到其他存储介质,如远程服务器或云存储服务。

11、在集群模式下如何处理慢查询日志?

在Redis集群模式下,慢查询日志的处理与单节点模式下略有不同。以下是在Redis集群模式下处理慢查询日志的一些建议方法:

  1. 通过设置 slowlog-log-slower-than 参数来定义慢查询的阈值,表示执行时间超过该值的命令将被记录为慢查询。可以根据需求调整该参数的值,通常建议设置为一个合理的时间阈值。

  2. 启用慢查询日志记录,在Redis配置文件中设置 slowlog-max-len 参数,定义慢查询日志的最大长度。可以根据需要将该值设置为一个适当的数字。

  3. 使用 slowlog get 命令来获取最近的慢查询日志,可以根据需要获取最新的日志或者历史日志。可以使用 slowlog reset 命令来重置慢查询日志,可以在某些情况下对维护和监控很有帮助。

  4. 使用Redis的监控命令来监视Redis集群中的各个节点的性能。可以使用 info 命令获取Redis集群的信息,例如内存使用情况、连接数、命令处理速度等等。这些信息可以帮助找到潜在的性能瓶颈。

  5. 如果发现慢查询是由于某个特定的命令或操作引起的,可以考虑使用Redis的性能分析工具来进一步分析和优化该命令。

总之,在Redis集群模式下处理慢查询日志需要结合Redis的监视和分析工具,以及适当的参数设置来获取和分析性能数据,从而找到潜在的性能问题并采取相应的优化措施。

二、小结

• Redis 用一个链表以 FIFO 的顺序保存着所有慢查询日志。

• 每条慢查询日志以一个慢查询节点表示,节点中记录着执行超时的命令、命令的参数、命 令执行时的时间,以及执行命令所消耗的时间等信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis设计与实现之慢查询日志 的相关文章

  • 用于在 Windows 中自动执行桌面活动的 Python 代码

    我想使用 Python 在 Windows 环境中自动化桌面活动 怎样才能做到呢 一些例子也会有帮助 我所说的桌面活动是指控制鼠标和键盘 访问活动窗口属性 双击桌面上的图标 最小化和最大化窗口 通过键盘向输入弹出窗口输入数据等操作 看一下S
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 通过注册表将上下文菜单项添加到特定扩展

    首先我们要说的是 我使用的是 Windows 10 并且我看过很多有关此主题的帖子 但似乎没有一个适合我 查看这篇文章已经解决了一些问题 但我仍然需要一些帮助 仅针对特定文件类型将菜单项添加到 Windows 上下文菜单 https sta
  • Windows“findstr”命令:排除包含特定字符串的结果

    到命令findstr str1 我想添加一些内容来排除包含该字符串的结果str2 在Linux中 这样做的方法是添加 grep v str2 to grep str1 当然 是否有一个等效的标志 v在 Windows 中 是否有一个等效的标
  • 你知道 Windows 上有类似的 wc(unix 字数统计命令)程序吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 快速搜索给了我陶巴瓦厕所 http www tawbaware com wc htm 但它不接受 std
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • 在 wampserver 2.2 上安装 php_imagick.dll PHP 扩展

    我使用的是 32 位操作系统的 Windows 7 我安装了 ImageMagick 6 8 7 Q16Link https www imagemagick org script download php windows我能够从命令行 转换
  • subprocess.Popen('start') 失败

    在 python 中运行此命令将导致 WindowsError 指出找不到指定的文件 FAILS import subprocess subprocess Popen start notepad exe 在命令窗口中 它可以工作 start
  • Windows 和 python 3.2 的 Pylint 安装问题

    当我尝试使用 pip 在 Windows 上安装 pylint 时 我遇到了这个问题 我真的不知道它来自哪里 C Python33 Scripts gt pip exe install pylint Downloading unpackin
  • dia2dump:CoCreateInstance 失败 - HRESULT = 80040154

    我正在尝试使用 Visual Studio 2017 及其在 Windows 7 x64 上转储 PDB 的签名dia2dump https msdn microsoft com en us library b5ke49f5 aspx 我加
  • 如何在子 shell 中运行 cmd.exe 批处理文件

    我有一个批处理文件 通常像这样调用 longjob cmd gt result txt 2 gt 1 这工作正常 但脚本在执行过程中更改了目录 将我的 shell 留在该目录中 这很麻烦 有没有办法在子 shell 中运行命令 同时仍然允许
  • Boost + Visual Studio 2010 + Windows 平台 SDK 7.1

    有人可以告诉我 bjam 的命令行开关或其他可以使用新的 Windows Platform SDK 7 1 工具链使用 VS2010 进行 boost 编译的东西吗 您可以在普通的视觉工作室项目中设置该选项 默认值是 v100 是平台 7
  • Windows 睡眠功能极慢

    我正在通过 Windows h 使用 Sleep 命令制作一个程序 并且在 Windows 10 而不是 Windows 7 上运行我的程序时遇到了令人沮丧的差异 我将我的程序简化为下面的程序 它与我的更复杂的程序表现出相同的行为 在 Wi
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 哪个版本的 Miniconda 具有适用于 Windows 64 位的 Python 3.6?

    我正在开发一个需要这些深度学习库的项目 keras 和 tensorflow 不幸的是 这些不适用于 Python 3 7 有人可以告诉我一个带有 Python 3 6 的 Miniconda 版本 适用于 Windows 64 位 吗 我
  • 如何在Windows 8上正确使用SCardGetStatusChange?

    智能卡服务在 Windows 8 上的行为有所不同 并且 MSDN 尚未更新其文档 任何人都可以提供有关如何正确调用 SCardGetStatusChange 来监视 Windows 8 上的智能卡操作的代码片段吗 提前致谢 这是我为个人博
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 在运行时,我如何判断我是否在 WinXP+ 上? win32

    我正在进行一些 win32 字符串 API 调用 并假设字符串以宽字符串形式出现 这在 XP 和更高版本上有效 我该如何断言这一点 这是运行时检查还是编译时检查 我做错了吗 这是一个例子 typedef std basic string

随机推荐

  • I.MX RT1170双核学习(4):FreeRTOS之消息缓冲区(Message Buffer)双核通信详解

    对于RT1170来说 它有两个内核 那两个内核如何通信呢 我们可以通过 MU消息单元详解 来实现这些功能 但它一次只能传输32位的数据 我们知道CM7和CM4有一些公共的内存可以访问 那我们可不可以借助这些公共的内存来实现数据的交互呢 答案
  • Guitar Pro8.1最新2024中文免激活版下载(附教程)

    Guitar Pro 8 是一款功能强大的指法阅读器和编辑器 它允许您编辑吉他 贝斯和尤克里里的乐谱和指法谱 并为鼓或钢琴创建背景音轨 轻松创建 播放和共享您的标签 快速的进行乐谱播放并进行练习 也可以进行编辑操作 允许所有音乐家阅读 编写
  • PHP使用symfony/process来实现多进程请求url或执行多个php文件

    1 什么是symfony process Symfony Process是Symfony框架中的一个组件 用于处理和管理子进程 它提供了一个简单易用的API 可以执行外部命令 并与子进程进行交互 Symfony Process可以执行各种操
  • Docker与微服务:构建和部署微服务架构的完整指南

    微服务架构已经成为现代应用开发的主要范式之一 而Docker容器技术则为微服务的构建 部署和管理提供了理想的解决方案 本文将深入探讨如何使用Docker构建和部署微服务架构 提供更多示例代码和细致的指南 以帮助大家更全面地理解和运用这些关键
  • [杂谈] 乙方甲方交互的另一个例子

    之前有讨论 电信公司与设备供应商之间的一个甲乙关系 杂谈 甲方乙方的一个交互例子 https mzhan017 blog csdn net article details 135004416 其实作为供应商自己来说 其内部也有自己的乙方 比
  • 基于springboot+vue的露营地管理系统

    博主介绍 全网个人号和企业号 粉丝40W 每年辅导几千名大学生较好的完成毕业设计 专注计算机软件领域的项目研发 不断的进行新技术的项目实战 热门专栏 推荐订阅 订阅收藏起来 防止下次找不到 千套JAVA项目实战持续更新中 百套小程序APP项
  • 鉴赏 tcp vegas

    优秀的 vegas 之后 再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas 从下图可看出所有的 对 所有的 aimd 都毫无伸缩性 z 吞吐 x rtt y 丢包率 由 buffer size 直接决定 一下就可看出 rtt 和 bu
  • 华为OD机试 Java 【最大载货量】

    描述 在火车站旁的货运站 小明负责调度2K辆中转车 其中K辆用于干货 K辆用于湿货 每批到站的货物来自不同的供货商 需要按照顺序装入中转车 注意 一个供货商的货物只能装在一辆车上 不能分开 但是 一辆车可以放多个供货商的货物 问题是 要让所
  • 【lssvm回归预测】基于逻辑算法优化最小二乘支持向量机ILA-lssvm实现PM2.5浓度预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 《系统架构设计师教程(第2版)》第2章-计算机系统基础知识-07-系统性能

    文章目录 1 性能指标 1 1 计算机的性能指标 1 2 路由器的性能指标 了解即可 1 3 交换机的性能指标 了解即可 1 4 网络的性能指标 1 5 操作系统的性能指标 1 6 数据库管理系统的性能指标
  • AttributeError: module ‘tarfile‘ has no attribute ‘LinkOutsideDestinationError‘解决方案

    大家好 我是爱编程的喵喵 双985硕士毕业 现担任全栈工程师一职 热衷于将数据思维应用到工作与生活中 从事机器学习以及相关的前后端开发工作 曾在阿里云 科大讯飞 CCF等比赛获得多次Top名次 现为CSDN博客专家 人工智能领域优质创作者
  • WPF用ScottPlot动态绘制图像

    文章目录 单击移动 多线程 scott系列 绘图初步 多个图像 单击移动 在了解ScottPlot的绘图逻辑之后 在WPF中生成动态图像简直轻而易举 只需不断地删除旧图而绘制新图即可 新建一个按钮 绑定下面的函数 ScatterPlot d
  • 【华为数据之道学习笔记】5-10标签设计

    标签是根据业务场景的需求 通过对目标对象 含静态 动态特 性 运用抽象 归纳 推理等算法得到的高度精练的特征标识 用于差异化管理与决策 标签由标签和标签值组成 打在目标对象上 标签由互联网领域逐步推广到其他领域 打标签的对象也由用 户 产品
  • Kafka基础—3、Kafka 消费者API

    一 Kafka消费者API 1 消息消费 当我们谈论 Kafka 消费者 API 中的消息消费时 我们指的是消费者如何从 Kafka 主题中拉取消息 并对这些消息进行处理的过程 消费者是 Kafka 中的消息接收端 它从指定的主题中获取消息
  • 分数规划+费用流:LibreOJ - 2003

    https vj imken moe contest 598718 problem H 一坨分数的东西 显然二分 然后移一下项 可得 c i a i k b
  • table边框

    table边框 大家好 我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3 0的小编 也是冬天不穿秋裤 天冷也要风度的程序猿 探索Web设计的一角 Table边框的细节与魅力 在网页设计中 表格 Table 是一个常见且功能强大的元素 而表
  • 基于Java EE架构的汽车车辆管理系统设计与实现-计算机毕业设计源码68424

    摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在现实运用中 应用软件的工作规则和开发步
  • 解决adb传文件中文名问题

    echo off setlocal enabledelayedexpansion REM 路径后面记得不要加斜杠 set 目标路径 sdcard 01tmp echo 目标路径 目标路径 echo set 有连接 False for F t
  • Python Faker库:生成大量测试数据的强大工具

    在软件开发过程中 测试数据扮演着重要的角色 它不仅可以帮助开发者验证代码的正确性 还可以帮助测试人员进行压力测试和性能测试 然而 手动生成大量的测试数据是一项繁琐且耗时的任务 幸运的是 Python的Faker库提供了一种简单而高效的方法来
  • Redis设计与实现之慢查询日志

    目录 一 慢查询日志 1 相关数据结构 2 慢查询日志的记录 3 慢查询日志的操作 4 如何设置慢查询的阈值 5 如何查看慢查询日志的内容 6 如何分析慢查询日志以找出性能瓶颈 7 如何优化慢查询以提高Redis的性能 8 慢查询日志对Re