【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(持久化功能分析)

探究Redis服务启动的过程机制的技术原理和流程分析的指南(持久化功能分析)

  • Redis提供的持久化机制
    • Redis持久化如何工作
    • Redis持久化的故障分析
      • 持久化频率操作分析
        • 数据库多久调用一次write,将数据写入内核缓冲区?
        • 内核多久将系统缓冲区中的数据写入磁盘控制器?
        • 磁盘控制器何时将缓存中的数据写入物理介质上?
    • 数据损坏
    • Redis提供了RDB持久化和AOF持久化
      • RDB机制的优势和用法
        • RDB机制的优势
        • RDB持久化的略施
      • RDB文件保存过程
        • RDB文件保存指令
          • 持久化操作所引发的性能问题
        • 优势
        • 劣势
      • AOF文件保存过程
        • Redis指令分析介绍
        • AOF日志文件效果
        • AOF的压缩重写机制
          • AOF重写执行流程
        • AOF的优势
        • AOF的劣势
        • 扩展讨论
  • Redis数据的迁移操作
    • aof导入方式
    • RDB文件迁移
    • redis-dump方式
      • redis-load导入

Redis提供的持久化机制

Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能、持久存储和适应高并发应用场景等诸多优势。尽管Redis的发展起步较晚,但它的发展速度迅猛。

探究Redis持久化的工作原理以及实现方式。通过深入理解Redis持久化,用户可以更好地了解Redis数据的持久化和可靠性,进而更加有效地使用和管理Redis数据库。

本篇文章对于解决关于Redis持久化的误解非常有帮助,可以为用户提供更为清晰和准确的理解。

Redis持久化如何工作

Redis持久化是指将数据存储到在断电后数据不会丢失的设备中,通常指的是硬盘。简单来说,持久化就是将数据持久保存的过程。

现在我们来详细了解一下数据库在进行写操作时的具体过程,主要包括以下五个步骤:
在这里插入图片描述

  1. 客户端向服务端发送写操作请求(数据存储在客户端内存中)。
  2. 数据库服务端接收到写请求的数据(数据存储在服务端内存中)。
  3. 服务端调用write系统调用,将数据写入系统内存中的缓冲区(数据存储在缓冲区)。
  4. 操作系统将缓冲区中的数据转移到磁盘控制器(数据存储在磁盘缓存中)。
  5. 磁盘控制器将数据写入磁盘的物理介质中(数据真正保存在磁盘上)。

以上就是数据库进行写操作时的基本流程。通过持久化机制,数据可以在断电情况下得到有效保护,从而保证数据的可靠性和持久性。

Redis持久化的故障分析

让我们来对故障进行分析。写操作经过了上述提到的五个步骤,下面我们结合这些步骤,分析不同级别的故障可能导致的影响:
在这里插入图片描述

  1. 当数据库系统发生故障时,系统内核仍然正常运行。在这种情况下,只要执行完第三步,数据就是安全的,因为后续的操作系统会完成后面的步骤,确保数据最终存储在磁盘上。

  2. 当系统断电时,上述五个步骤中提到的所有缓存都会失效,数据库和操作系统也会停止工作。因此,只有在完成第五步之后,才能确保在断电后数据不会丢失。

通过以上分析,我们可以看出,在数据库的写操作中,如果完成了第三步和第五步,数据就会得到保证。在故障发生时,正确的执行和处理这些步骤是确保数据安全和避免数据丢失的关键。

持久化频率操作分析

通过上述的五个步骤,我们可能会产生以下几个问题的疑惑:

数据库多久调用一次write,将数据写入内核缓冲区?

对于这个问题,数据库通常会对此进行完全的控制。

内核多久将系统缓冲区中的数据写入磁盘控制器?

操作系统会有默认的策略,但是我们也可以通过POSIX API提供的fsync系列命令来强制操作系统将数据从内核区写入磁盘控制器。

磁盘控制器何时将缓存中的数据写入物理介质上?

尽管看起来数据库无法直接触及,但实际上,在大多数情况下磁盘缓存会被关闭,或者仅用于读取缓存,也就是说,写操作直接写入磁盘而不进行缓存。建议的做法是,只有在磁盘设备具备备用电池的情况下才开启写缓存。

数据损坏

数据损坏是指数据无法恢复。在上面我们讨论了如何确保数据被写入磁盘,但是写入磁盘并不意味着数据不会损坏。举个例子,当发生意外时,可能只有一次写操作成功完成,而另一次写操作尚未完成。此时,如果数据库的数据文件结构组织不合理,可能导致数据无法完全恢复。

为了防止数据文件损坏且无法恢复,通常有三种策略来组织数据:
在这里插入图片描述

  1. 第一种策略是最基本的方法,即通过配置数据同步备份来保证数据的可恢复性。即使数据文件损坏,也可以通过数据备份来进行恢复。实际上,MongoDB在不开启操作日志的情况下,通过配置 Replica Sets 就是采用了这种策略。

  2. 另一种策略是在前面的基础上增加一个操作日志,每次操作都会记录操作的行为。通过操作日志,我们可以进行数据恢复。由于操作日志是按顺序追加的方式写入的,因此不会发生操作日志也无法恢复数据的情况。这也类似于MongoDB开启了操作日志的情况。

  3. 更加安全的做法是数据库不直接修改旧数据,而是以追加的方式进行写操作。这样数据本身就是一种日志,从而永远不会出现无法恢复数据的情况。实际上,CouchDB就是这种做法的一个优秀例子。

Redis提供了RDB持久化和AOF持久化

Redis有两种持久化策略:RDB快照和AOF日志。

  • RDB快照:Redis可以将当前数据生成一个数据文件作为持久化机制。为了生成快照,Redis使用了fork命令的copy on write机制。生成快照时,Redis会fork出一个子进程,并在子进程中循环遍历所有数据,然后将数据写入RDB文件。

  • AOF日志:AOF日志的全称是Append Only File,它是一个追加写入的日志文件。与一般数据库不同,AOF文件是一个可识别的纯文本文件,其中包含了一系列的Redis标准命令。通过启用AOF功能,Redis会将每个写操作都追加到AOF文件末尾,从而记录了数据库的完整操作历史。

RDB机制的优势和用法

RDB持久化是指将内存中的数据集以快照的方式写入磁盘,它是Redis的默认持久化方式。持久化文件的默认名称是"dump.rdb"。

在RDB机制中,可以通过配置来设置自动执行快照持久化的方式。我们可以配置Redis,在一定的时间间隔内,当有一定数量的键被修改时,自动执行快照持久化。以下是默认的快照保存配置示例:

   save 900 1     # 在900秒内,如果有1个或更多键被修改,则执行快照保存
   save 300 10    # 在300秒内,如果有10个或更多键被修改,则执行快照保存
   save 60 10000  # 在60秒内,如果有10000个或更多键被修改,则执行快照保存

RDB机制的优势

  • 性能:RDB持久化采用了快照的方式,将整个数据集写入磁盘。相比于AOF(Append-Only File)持久化方式,RDB在恢复数据时的速度更快,因为只需加载一次文件即可

  • 占用空间较小:RDB持久化生成的快照文件是二进制文件,相比于AOF持久化生成的文本文件,占用的空间更小

  • 简单和灵活:RDB机制配置简单,适用于定期备份数据或将数据迁移到其他环境

RDB持久化的略施

  1. 配置合理的保存策略:根据实际需求,可以调整保存策略的时间间隔和键的修改数量,以平衡数据可靠性和性能效率。

  2. 定期监测和验证RDB文件的完整性:定期检查RDB文件是否完整,以确保在恢复数据时不会出现问题。

  3. 定期备份RDB文件:为了防止意外情况下的数据丢失,定期将RDB文件备份到其他位置。

RDB文件保存过程

在这里插入图片描述

  1. Redis调用fork命令后,会生成一个子进程和一个父进程。

  2. 父进程继续处理客户端请求,而子进程负责将内存中的数据写入临时文件。

由于操作系统的写时复制机制(copy on write),父进程和子进程会共享相同的物理数据页。当父进程要修改数据页时,操作系统会为其创建一个副本,而不是直接写入共享的页面。因此,子进程的地址空间中的数据是fork时刻整个数据库的一个快照

  1. 当子进程将快照写入临时文件完成后,会用临时文件替换原来的快照文件,然后子进程退出

RDB文件保存指令

客户端也可以使用save或者bgsave命令通知Redis执行快照持久化操作。

持久化操作所引发的性能问题

每次快照持久化都会将内存数据完整地写入磁盘,并非增量同步脏数据。如果数据量较大且有大量写操作,将会引发大量的磁盘IO操作,可能严重影响性能。因此,在性能敏感的情况下,需要考虑其他持久化方式或配置适当的快照保存策略,以减少对性能的影响。

注意,save操作是在主线程中执行的,而Redis使用单线程来处理所有客户端请求。这种方式会阻塞所有客户端请求,因此不推荐使用。

优势

  • 方便备份:采用RDB方式后,整个Redis数据库只包含一个文件,非常方便进行备份。例如,可以每天归档一些数据,只需移动一个RDB文件到其他存储介质即可

  • 快速恢复:RDB在恢复大数据集时的速度比AOF恢复速度更快,能够迅速还原数据库状态。

  • 最大化性能:RDB可以最大化Redis的性能。父进程在保存RDB文件时只需fork出一个子进程,然后子进程负责处理接下来的保存工作,父进程无需执行磁盘IO操作,减少了性能开销。

劣势

  • 数据丢失风险:如果需要尽量避免在服务器故障时丢失数据,RDB并不适合。由于RDB文件需要保存整个数据集的状态,保存频率较低,可能导致在故障停机时丢失几分钟的数据。

  • 高耗时:每次保存RDB时,Redis都会fork出一个子进程来进行实际的持久化工作。当数据集较大时,fork操作可能耗时较长,导致服务器在某段时间内停止处理客户端请求。如果数据集非常巨大且CPU资源紧张,这种停止时间甚至可能长达整整一秒。相比之下,AOF重写也需要fork操作,但不论执行间隔长短,数据的耐久性都不会受到任何损失。

AOF文件保存过程

Redis会将每个收到的写命令通过write函数追加到文件中(默认为appendonly.aof)。当Redis重启时,它会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

./redis-server --appendonly yes

注意,由于操作系统会在内核中缓存write所做的修改,因此并不是立即写入磁盘。

AOF方式的持久化可能会丢失部分修改。但是,我们可以通过配置文件告诉Redis在何时通过fsync函数强制将数据写入磁盘。有三种可选方式如下(默认为每秒fsync一次):

appendonly yes              //启用aof持久化方式
# appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec     //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
# appendfsync no    //完全依赖os,性能最好,持久化没保证

Redis指令分析介绍

redis 127.0.0.1:6379> set key1 Hello
OK
redis 127.0.0.1:6379> append key1 " World!"
(integer) 12
redis 127.0.0.1:6379> del key1
(integer) 1
redis 127.0.0.1:6379> del non_existing_key
(integer) 0

AOF日志文件效果

$ cat appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
set
$4
key1
$5
Hello
*3
$6
append
$4
key1
$7
 World!
*2
$3
del
$4
key1

AOF的压缩重写机制

AOF方式也带来了另一个问题,即持久化文件的大小逐渐增大。例如,我们调用了100次incr test命令,文件中将保存全部的100条命令,而实际上有99条是多余的。因为为了恢复数据库的状态,只需要保存一条set test 100命令就足够了。

为了压缩AOF持久化文件,Redis提供了bgrewriteaof命令。当收到该命令时,Redis将以与快照相似的方式将内存中的数据以命令的形式保存到临时文件中,最后替换原来的文件。

AOF重写执行流程

在这里插入图片描述1. Redis调用fork创建父子两个进程。
2. 子进程根据内存中的数据库快照,将重建数据库状态所需的命令写入临时文件。
3. 父进程继续处理客户端请求,将写命令写入原始的AOF文件,并将接收到的写命令缓存起来。这样即使子进程的重写操作失败,也不会出现问题。
4. 当子进程将快照内容以命令的方式写入临时文件后,子进程发送信号通知父进程。然后父进程将缓存的写命令也写入临时文件。
5. 现在父进程可以用临时文件替换旧的AOF文件,并将其重命名。之后,后续接收到的写命令将追加到新的AOF文件中。

注意,重写AOF文件的操作并不涉及读取旧的AOF文件,而是通过将整个内存中的数据库内容用命令的方式重写一个新的AOF文件。这一点类似于快照操作

AOF的优势

  • AOF持久化可以让Redis变得非常耐久:可以设置不同的fsync策略来控制写入频率,保证数据的持久性。默认的每秒fsync一次的策略可以保持良好的性能,即使发生故障停机,最多只会丢失一秒钟的数据。

  • AOF文件是一个只进行追加操作的日志文件,不需要进行seek操作,即使AOF文件中包含未完整写入的命令,使用redis-check-aof工具可以轻松修复。

  • Redis可以在AOF文件体积过大时,在后台自动进行AOF重写,生成包含恢复当前数据集所需的最小命令集合的新AOF文件。重写操作是安全的,在创建新AOF文件的过程中,仍然会将命令追加到旧的AOF文件中,即使重写过程中发生停机,旧的AOF文件也不会丢失。

  • AOF文件有序地保存了所有写入操作,格式简单易懂,方便人工阅读和文件分析。导出AOF文件也很简单,例如当执行了FLUSHALL命令后,只要AOF文件未被重写,可以通过去除AOF文件末尾的FLUSHALL命令,然后重新启动Redis来恢复数据集到执行FLUSHALL之前的状态。

AOF的劣势

  • 对于相同的数据集来说,AOF文件通常比RDB文件更大。

  • 根据所使用的fsync策略,AOF的速度可能比RDB慢。一般情况下,每秒fsync的性能依然非常高,而关闭fsync可以让AOF的速度和RDB一样快,即使在高负载下也是如此。然而,处理大量的写入负载时,RDB可以提供更可靠的最大延迟时间。

  • AOF在过去曾遇到过一些bug,特定命令导致AOF文件在重新载入时无法恢复数据集到原始状态。虽然这种bug较为罕见,但与RDB相比,几乎不会出现这种情况。测试套件已经添加了针对这种情况的检测,通过重新载入随机、复杂的数据集来确保恢复正常。

扩展讨论

写操作都会生成相应的命令作为AOF日志,但需要注意的是,最后一个del命令不会被记录在AOF日志中,因为Redis判断该命令不会修改当前数据集,所以无需记录无用的写命令。

此外,AOF日志的生成并不完全按照客户端请求,例如命令INCRBYFLOAT会被记录为一条SET记录,因为浮点数操作在不同系统上可能会有不同结果。为了避免在不同系统上生成不同的数据集,这里只记录操作后的结果通过SET命令来记录。

Redis数据的迁移操作

aof导入方式

如何将源实例的AOF数据文件导入到目标实例中。首先在目标实例上清空数据,然后在源实例上开启AOF功能并生成AOF数据文件。接下来,通过使用--pipe参数和输入重定向符号将AOF数据文件导入到目标实例。最后,关闭源实例的AOF功能。这个过程可以用于在不同的Redis实例之间迁移数据或复制数据。

  1. 清空目标实例数据:通过执行redis-cli命令,连接到目标实例(xxx.xxx.xxx.xxx),并使用密码进行身份验证。然后,使用flushall命令清空目标实例中的所有数据。
[root~]# redis-cli -h xxx.xxx.xxx.xxx -a password flushall
OK
  1. 源实例开启AOF功能:通过执行redis-cli命令,连接到源实例(xxx.xxx.xxx.xxx),并使用密码进行身份验证。然后,使用config set appendonly yes命令将AOF功能设置为开启状态。
[root~]# redis-cli -h xxx.xxx.xxx.xxx -a password config set appendonly yes
  1. 生成AOF文件:开启AOF功能后,Redis会将所有写入操作追加到AOF文件(名为appendonly.aof)中。该文件会存储源实例的数据变更操作。

  2. 导入AOF数据到目标实例:假设appendonly.aof文件与当前路径相同。使用redis-cli命令,连接到目标实例(xxx.xxx.xxx.xxx),并使用密码进行身份验证。然后,使用--pipe参数和输入重定向(<)符号将appendonly.aof文件的内容导入到目标实例。

[root ~]# redis-cli -h xxx.xxx.xxx.xxx -a password --pipe < appendonly.aof
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 5
  1. 检查导入结果:在导入期间,redis-cli将显示传输进度。当最后一个回复接收到时,显示发送错误数量和回复数量。如果没有错误并且回复数量正确,那么导入操作成功。

  2. 关闭源实例的AOF功能:通过执行redis-cli命令,连接到源实例(xxx.xxx.xxx.xxx),并使用密码进行身份验证。然后,使用config set appendonly no命令将AOF功能设置为关闭状态。

[root~]# redis-cli -h xxx.xxx.xxx.xxx -a password config set appendonly no
OK

RDB文件迁移

  1. 复制当前Redis的RDB文件:将要迁移的Redis的RDB文件名设置为与当前Redis的RDB文件名相同(在本例中,要迁移的Redis的文件名为/var/rdb/dump6380.rdb),确保在继续操作之前,杀掉当前Redis进程,并关闭要迁移的服务器的AOF功能(如果未关闭AOF功能,默认使用AOF文件来恢复数据)。

  2. 启动Redis实例6380:启动Redis实例6380后,您会注意到6380中多了数据。这个数据就是从6379固化到RDB文件中的数据。

redis-dump方式

redis-dump是一个用于导出Redis数据的工具。它可以帮助你将Redis数据库中的数据导出为文本文件,以便进行备份、迁移或分析。以下是redis-dump工具的使用步骤:

  1. 安装redis-dump工具:你可以使用npm包管理器全局安装redis-dump,运行如下命令:

    npm install -g redis-dump
    
  2. 运行redis-dump命令:运行下面的命令导出Redis数据库中的数据:

    redis-dump -u <redis服务器地址> -p <redis服务器端口> -o <输出文件路径>
    

    替换 <redis服务器地址><redis服务器端口><输出文件路径> 分别为你的Redis服务器的地址、端口和导出数据的输出文件路径。

    例如,如果Redis服务器的地址是 127.0.0.1,端口是 6379,输出文件路径是 /path/to/output.txt,则命令如下:

    redis-dump -u 127.0.0.1 -p 6379 -o /path/to/output.txt
    
  3. 导入导出的数据:得到导出的数据文件后,你可以使用Redis的redis-cli命令行工具,通过RESTORE命令将数据导入到另一个Redis实例中。例如:

    cat /path/to/output.txt | redis-cli -h <目标redis地址> -p <目标redis端口> --pipe
    

    替换 <目标redis地址><目标redis端口> 为你要导入数据的Redis实例的地址和端口。

这样就完成了使用redis-dump工具导出和导入Redis数据的操作。请确保你已经在操作前备份好数据,以免误操作导致数据丢失。

redis-load导入

[root ~]# cat xxx.xxx.xxx.xx.txt | redis-load -u :password@xxx.xxx.xxx.xxx:6379

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全(黑客)学习笔记

1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有…

微服务安全简介

​由于其可扩展性、灵活性和敏捷性&#xff0c;微服务架构已经变得越来越受欢迎。然而&#xff0c;随着这种架构的分布和复杂性增加&#xff0c;确保强大的安全措施变得至关重要。微服务的安全性超越了传统的方法&#xff0c;需要采用全面的策略来保护免受不断演变的威胁和漏洞…

Nginx与Tomcat服务器的区别以及个人网站部署方案

- Nginx和Tomcat作用一样吗&#xff1f; 答&#xff1a;不完全相同。Nginx 和 Tomcat 都可以作为 Web 服务器&#xff0c;但它们的作用略有不同。 Nginx 是一个高性能的 Web 服务器和反向代理服务器。它的主要作用是提供静态文件服务、反向代理、负载均衡、缓存、SSL 加密等功…

从新手到大师:优雅的Vim熟练之旅(万文详解)

从新手到大师&#xff1a;优雅的Vim熟练之旅 博主简介一、前言1.1、Vim编辑器的重要性和流行性1.2、目标 二、Vim简介2.1、什么是Vim2.2、历史和背景简介2.3、Vim的优势和适用场景 三、安装和设置Vim3.1、下载和安装Vim编辑器3.2、基本配置&#xff1a;.vimrc文件的重要性和常用…

解决使用@Field注解配置分词器失效问题(Spring Data Elasticsearch)

问题复现&#xff1a;插入数据时&#xff0c;实体类配置的Field注解没有生效 实体类&#xff1a; package cn.aopmin.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import…

网工玩虚拟机,别再只会用VMware了

中午好&#xff0c;我的网工朋友。 说起虚拟机&#xff0c;大家都不陌生吧。 虽然容器技术现在很火爆&#xff0c;但虚拟机还是业内网红。 毕竟使用场景非常多&#xff0c;比如说搭建测试环境、在Windows系统中安装Linux或在Mac机器上运行Windows系统…… 甚至还可以用来进…

jmeter随记2:压测

jmeter随记1:压测 简述一、压测步骤二、观察cpu和内存占用情况三、查看磁盘占用情况 简述 关于压测&#xff0c;jmeter更直观的作用是用来编写压测脚本【请求和压测策略】&#xff0c;然后在linux服务器上执行&#xff0c;也可以在本地执行&#xff0c;压测执行脚本在启动jmet…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统&#xff0c;在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性&#xff0c;可将几乎所有对象存储接入本地作为海量本地磁盘使用&#xff0c;亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

C#月数计算器(主要用于社保、医保缴费月数计算)

1、为什么做这个&#xff1f; 工作中&#xff0c;经常需要计算参保人社保、医保缴费月数&#xff0c;之前都是在Excel中写一个DATEDIF公式&#xff0c;修改单元格中的日期&#xff0c;计算间隔的月数&#xff0c;公式如下&#xff1a; DATEDIF(起始日期, 终止日期, 返回类型) …

如何在APP开发中实现无缝用户体验?

我们在日常生活中经常会看到这样一种情况&#xff1a;当我们打开 APP时&#xff0c;有时会出现卡顿、死机的情况&#xff0c;这就是所谓的“死机”现象。在开发 APP时&#xff0c;我们需要考虑用户体验&#xff0c;在用户操作 APP时能够感受到顺畅的使用体验&#xff0c;让用户…

体制内裸辞,她用云端地球实现了自己的乡村梦

追逐田园的“诗与远方” “我最初的梦想&#xff0c;就是有一个亲手打造的、能装进个人喜好的小院子。”为完成自己的梦想&#xff0c;吕春萍毅然放弃了体制内的工作&#xff0c;来到秦岭脚下的桥南镇曹峪村&#xff0c;践行自己的“乡村梦”。 起初&#xff0c;吕春萍做了五…

晚上12点接到面试邀约电话,待业一个月的我却拒绝了....

前言 一位测试朋友最近一直在找工作&#xff0c;前两天刚拒绝了一个面试。那天晚上12点多&#xff0c;他接到一个HR的面试电话&#xff0c;让他第二天早上10点去公司面试。朋友和HR聊了两句&#xff0c;了解到这位HR经常加班&#xff0c;于是果断拒绝了这个面试。 我还为他可惜…

adnroid 11. 0 Activity启动流程图解

从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate

docker基本命令学习 | Docker网络、Docker镜像发布

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; docker安装、卸载 docker安装使用 卸载旧版本docker或者环境 [rootiZf8zdcobr3fw7vn0p3538Z /]# yum remove docker \ > docker-client \ >…

【Kafka】消息队列Kafka基础

目录 消息队列简介消息队列的应用场景异步处理系统解耦流量削峰日志处理 消息队列的两种模式点对点模式发布订阅模式 Kafka简介及应用场景Kafka比较其他MQ的优势Kafka目录结构搭建Kafka集群编写Kafka一键启动/关闭脚本 Kafka基础操作创建topic生产消息到Kafka从Kafka消费消息使…

计算机网络最基础知识介绍

OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作为底层,掌握得越透彻,理解上层时会越顺畅。今天这篇网络基础科普,就是根据OSI层级去逐一展开的。 01 计算机网络基础 01 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MA…

使用Gin框架搭配WebSocket完成实时聊天

文章目录 前言实时聊天聊天功能测试发送信息 前言 在写项目的时候&#xff0c;需要完成实时聊天的功能&#xff0c;于是简单的学习下WebSocket&#xff0c;想知道WebSocket是什么的小伙伴可以去网上别的地方学习一下。 要实现实时聊天&#xff0c;网上的大部分内容都是Spring…

Python爬虫+数据可视化:分析唯品会商品数据

目录 前言数据来源分析1. 明确需求2. 抓包分析&#xff1a;通过浏览器自带工具: 开发者工具 代码实现步骤: 发送请求 -> 获取数据 -> 解析数据 -> 保存数据发送请求解析数据保存数据 数据可视化先读取数据泳衣商品性别占比商品品牌分布占比各大品牌商品售价平均价格各…

macOS mysql 8.0 忘记密码

╰─➤ mysql -V mysql Ver 8.0.33 for macos13.3 on arm64 (Homebrew)mysql.server status mysql.server stopskip-grant-tables 启动mysql ─➤ /opt…

通达信有价值的资金流向指标公式-通达信公式

资金流向指标公式&#xff1a; 流通:AMOUNT/VOL; PJJ:DMA((HIGHLOWCLOSE*2)/4,0.9); JJ:REF(EMA(PJJ,3),1); QJJ:VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)); XVL:(IF(CLOSE>OPEN,QJJ*(HIGH-LOW),IF(CLOSE<OPEN,QJJ*(HIGH-OPENCLOSE-LOW),VOL/2))IF(CLOSE>OPEN,0-QJJ*(…