StackGres 1.6 数据库平台工程功能介绍以及快速上手

image

StackGres 1.6 数据库平台工程功能

声明式 K8S CRs

StackGres operator 完全由 Kubernetes 自定义资源管理。除了 kubectl 或任何其他 Kubernetes API 访问之外,不需要安装任何客户端或其他工具来管理 StackGres。您的请求由 CRD 的 spec 部分表示,任何 result 信息都在集群中资源的 status 部分中提供。

StackGres CRDs 被设计为非常高阶的,并且抽象(隐藏)了所有 Postgres 的复杂性。对于 StackGres,如果您知道如何使用 kubectl 以及如何定义 CRDs,那么您也已经成为 Postgres 的专家用户。

在 CRDs 中定义 StackGres 的定义和操作的能力使您能够将所有 Postgres 集群定义为基础设施即代码(IaC),并在 Git 中进行版本控制。这就启用了 GitOps 的配置管理方式,当您向版本控制中的 CRDs 提交更改时,可以自动管理您的集群。通常,这种资源定义方式支持非常灵活和可扩展的方法。

请查看 CRD Reference,了解 StackGres 资源的结构。

  • https://stackgres.io/doc/latest/reference/crd/

请参阅 Getting Started,开始极简的 StackGres 安装。

  • https://stackgres.io/doc/latest/quickstart/

Note: 如果您更喜欢可视化 UI 而不是 YAML 文件和命令行,请注意,您可以通过 CRDs 查询或执行的每一个操作也可以通过 web 控制台进行。
同样,在 web 控制台中执行的任何操作都将自动反映在 CRDs 中。
选择权在你。

默认调优

StackGres 集群将由高度专业的 OnGres Postgres DBA 团队精心调整的初始 Postgres 配置创建。

这意味着 StackGres 附带了一个开箱即用的调优配置,即使您不是 Postgres 高级用户,也可以很好地使用这个默认配置。使用 StackGres,您不需要成为 Postgres 专家就可以操作生产就绪的集群。

如果您希望进一步调优 Postgres,您可以通过 SGPostgresConfig CRD 创建自定义配置,并相应地在集群中引用它们。

  • https://stackgres.io/doc/latest/reference/crd/sgpostgresconfig/

OnGres, StackGres 的创造者们痴迷于充分调优 Postgres。所以他们建立了 postgresqlCO.NF,一个帮助成千上万的 Postgres 用户更好地调优他们的数据库的网站。

  • https://ongres.com/
  • https://postgresqlco.nf/

自定义配置

StackGres 是用普通 Postgres 构建的,并提供没有限制的 Postgres 实例。
您可以提供自定义配置,并在自己的 Postgres 安装中使用任何进一步的自定义。

完全的 postgres 用户访问权限

在 StackGres 中没有限制的伪用户。相反,您可以以最大权限访问 postgres 用户( postgres 中的 "root" 用户)。你拥有它,没有任何警告。

自定义配置

StackGres 允许高级 Postgres 用户进一步定制组件和配置。这些配置由 CRDs 支持并经过充分验证,因此如果错误地设置集群,就不会有一个简单的 ConfigMap 导致集群崩溃。

请参阅 配置指南,深入了解如何调优 Postgres 或连接池配置。至于其他 Kubernetes 资源,您可以自定义公开的服务、pod 的标签和节点容忍度等等。

  • https://stackgres.io/doc/latest/administration/configuration/

总的来说,StackGres 让你完全控制。

高可用

StackGres 集成了 Postgres 中最著名的、经过生产测试的高可用性软件: Patroni。

  • https://github.com/zalando/patroni

StackGres 完全集成了 Patroni,您无需再做其他任何事情。如果任何 pod、任何节点或任何东西发生故障,集群将在几秒钟内自动执行故障转移并重新修复,而无需人工干预。

StackGres 通过 Kubernetes 服务为应用程序公开了一个读写(主)和一个只读(副本)连接,在任何中断事件发生后,该连接将自动更新。

请参阅 High Availability Guide,了解更多关于将 Patroni 集成到 StackGres 中的信息,以及如何执行手动切换或如何测试故障转移。

  • https://stackgres.io/doc/latest/administration/patroni/

自动备份

备份是数据库的关键部分,也是任何灾难恢复策略的关键。StackGres 包括基于连续归档的备份,它允许零数据丢失恢复和 PITR(Point-in-Time Recovery),将数据库恢复到任意过去的时间点。

StackGres 还提供备份的自动生命周期管理。备份总是存储在当今可用的最持久的介质中: cloud object storage,如 Amazon's S3、Google Cloud Storage 或 Azure Blob。如果您在 prem 上运行,您可以使用 Minio 或其他兼容 S3 的软件来存储备份。

  • https://aws.amazon.com/s3/
  • https://cloud.google.com/products/storage
  • https://azure.microsoft.com/en-us/services/storage/blobs/
  • https://min.io/

您需要提供 bucket 访问信息和凭据,配置保留策略,其他一切都由 StackGres 完全自动化。
您还可以随时通过简单的 YAML 文件创建手动备份。

请参阅 Backups Guide 以了解有关如何定义和管理备份的更多信息。

  • https://stackgres.io/doc/latest/administration/backups/

服务器端连接池

由于 Postgres 进程模型的原因,强烈建议在生产场景中使用连接池。

StackGres 提供了集成的服务器端连接池。PgBouncer 作为一个 sidecar 容器部署在 Postgres 容器旁边。

  • https://www.pgbouncer.org/

服务器端池可以控制连接流入,即进入 Postgres 的连接,并确保 Postgres 不会被可能导致显著性能下降的流量淹没。StackGres 还将相关的连接池指标导出到 Prometheus,并且专门的仪表板显示在集成到 web 控制台的 Grafana 中。

您可以通过 SGPoolingConfig CRD 调优低级配置,甚至完全禁用连接池。

  • https://stackgres.io/doc/latest/reference/crd/sgpoolingconfig/

请查看 Connection Pooling Configuration section ,了解有关如何配置连接池的更多信息。

  • https://stackgres.io/doc/latest/administration/configuration/pool/

分布式的日志

对于那些厌倦了在集群的每个 pod 中输入 kubectl exec,然后在 Postgres 日志中 grepawk 来获取你想要的信息的人来说,StackGres 是一个更好的解决方案。

StackGres 支持 Postgres 和 Patroni 的集中式分布式日志。
分布式日志集群可以通过基于 YAML 的 CRDs 或 web 控制台快速创建和配置。

Postgres 和 Patroni 容器日志都将通过 FluentBit sidecar 捕获,并将它们转发到分布式日志服务器。
它也包含一个 Fluentd 收集器,将日志转发到专用的 Postgres 数据库。为了支持高日志量摄取,这个日志专用数据库通过 TimescaleDB 扩展进行了增强,StackGres 还依赖于 TimescaleDB 扩展来执行日志保留策略。

  • https://fluentbit.io/
  • https://www.fluentd.org/

然后可以从集中位置通过 SQL 查询聚合的日志,或者通过 web 控制台进行可视化,其中包括搜索和过滤功能。日志使用丰富的元数据进行了增强,这有助于任何 Postgres 故障排除。

有关如何配置分布式日志的更多信息,请参阅 Distributed Logs Guide。

  • https://stackgres.io/doc/latest/administration/distributed-logs/

可观测

StackGres 使 Postgres 指标可用于增强可观察性,并与 Prometheus 堆栈完全集成,包括预定义的,特定于 Postgres 的 dashboards 和 alerts。

StackGres 利用 Envoy sidecar 透明地代理所有 Postgres 流量。OnGres 团队与 Envoy 社区合作开发了第一个 Postgres filter for Envoy。这个 Envoy Postgres 过滤器通过解码 Postgres wire 协议并向 Prometheus 发送指标来提供增强的可观测性。这不仅增加了在 Postgres 级别不可用的指标,而且对 Postgres 没有任何影响,因为这些指标是在代理级别收集的。这个过程对 Postgres 是完全透明的。

  • https://www.cncf.io/blog/2020/08/13/envoy-1-15-introduces-a-new-postgres-extension-with-monitoring-support/

Envoy 将发送额外的指标,只要在 Kubernetes 中配置了 Prometheus 实例,就没有更多的事情要做。

StackGres web 控制台包括内置的 Grafana 仪表板来可视化这些指标。

请参阅 Monitoring Guide ,以了解关于如何配置监视的更多信息。

  • https://stackgres.io/doc/latest/administration/monitoring/

Web UI 管理控制台

StackGres 带有一个功能齐全的 web 控制台,允许您读取任何信息并执行任何操作,这些操作也可以通过 kubectl 和 StackGres CRDs 完成。

image

这个 web 控制台是针对 DBA 的内部使用的,可以通过 LoadBalancer 或其他 Kubernetes 路由机制公开。

web 控制台可以通过默认的管理凭据访问,也可以通过 Kubernetes RBAC 进行用户身份验证或 SSO 集成访问。它还附带了一个 REST API,以提供进一步的灵活性。

请查看 Admin UI Guide,了解如何访问和使用它的更多信息。

  • https://stackgres.io/doc/latest/administration/adminui/

web 控制台支持光和暗模式,以优化您的用户体验。

Day-2 操作

StackGres 以生产就绪的方式全面管理您的Postgres集群。它具有 day-2 的操作功能,如 PostgreSQL 的次要和主要版本升级、容器升级、受控重启、vacuum 或 repack,可以以简单安全的方式使用。

版本升级或重新启动等管理操作很容易造成压力,这就是为什么设计良好的 database operator 应该以合理的方式实现这些操作的原因。StackGres 以受控的生产级方式执行 day-2 操作。

一般来说,工程师在 StackGres CRDs 中定义所需的目标状态,通过 Kubernetes API (或者 web 控制台)应用更改,然后 StackGres operator 负责其余的工作。这种方法最大限度地减少了用户方面的粗心错误,因为不需要过程性步骤,只需要声明性定义。StackGres CRDs 提供了一种类型安全的方式来定义资源、配置和集群操作,并由 StackGres operator 理解和验证。

根据所需的更改,StackGres 以合理的方式执行更改,并考虑到生产准备情况。
这意味着,例如,所需的 Postgres 集群重启不只是立即执行(并且可能危及数据库可用性),而是以受控的方式执行。

StackGres 旨在提供 DBA 专家和 Kubernetes operator 的最佳组合。

高级复制模式

StackGres 为 Postgres 实例支持不同的高级复制模式,包括异步、同步和组复制。

还支持在单独的 Kubernetes 集群上进行级联复制和备用集群,以便进行灾难恢复。

可以在 SGCluster CRD replication section 中配置复制模式。

  • https://stackgres.io/doc/latest/reference/crd/sgcluster/#replication

Sharding,高可用分布式 Postgresql

集成 Patroni + Citus + PgBouncer,高可用分布式 Postgresql 一键部署。

PostgreSQL 扩展

扩展是 Postgres 最受欢迎的功能。
通过扩展,数据库功能可以以任何可以想象的方式进行扩展。
而且,Postgres 用户受益于由数百个开源扩展组成的生态系统。

StackGres 支持 150 多个 Postgres 扩展,并且可以动态地将扩展加载到 Postgres 集群的 pod 中。
因此,StackGres 是世界上拥有最多扩展的 Postgres 平台。

请查看 扩展 的完整列表和 扩展指南,以了解如何在 StackGres 中配置和使用扩展。

生态

StackGres 用户受益于一个非常活跃、友好和支持的生态系统。

StackGres 100% 是免费开源的,有一个开源友好的许可证。
没有“具有高级功能的高级版本”,也没有任何生产使用限制。
It's just Open Source.

如果你想了解更多关于 StackGres 内部工作的信息,甚至想贡献自己的力量,你可以查看 official repositories、issue trackers 或 community Slack:

  • GitLab Repository
    • https://gitlab.com/ongresinc/stackgres
  • Issue Tracker
    • https://gitlab.com/ongresinc/stackgres/-/issues
  • GitHub Mirror Repository
    • https://github.com/ongres/stackgres
  • FAQ
    • https://stackgres.io/doc/latest/faq/
  • Community Slack
    • https://slack.stackgres.io/
  • Community Discord
    • https://discord.stackgres.io/
  • 24/7 Enterprise Support
    • https://stackgres.io/support/

StackGres 1.6 数据库平台工程快速上手

在本篇中,您将学习如何开始使用 StackGres。
我们将在 Kubernetes 集群上安装 StackGres,并创建一个 Postgres 实例。

NOTE: 要运行此 demo,您需要一个已经在 kubectl 中配置的 K8s environment。

  • https://stackgres.io/doc/latest/install/prerequisites/k8s/

安装 Operator

为了便于演示,我们提供了一些 Kubernetes 资源文件,以便安装 StackGres operator。
假设您已经安装了 kubectl CLI, 您可以使用以下命令安装 operator:

  • https://kubernetes.io/docs/tasks/tools/install-kubectl/
kubectl apply -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

这将安装所有必需的资源,并将 StackGres operator 添加到新的命名空间 stackgres 中。

stackgres-operator-demo.yml 将使用 LoadBalancer 暴露 UI。
请注意,使用此功能可能会给您的主机提供商带来额外的成本(例如,EKS、GKE 和 AKS 就是这种情况)。

等待 Operator 启动

一旦它准备好了,你会看到 operator pods 的状态是 Running:

kubectl get pods -n stackgres
# 正常会有如下输出
NAME                                  READY   STATUS    RESTARTS   AGE
stackgres-operator-668bf7586d-krh7f   1/1     Running   0          28h
stackgres-restapi-d7f9bd787-dh6tr     2/2     Running   0          28h

创建集群

要创建第一个 StackGres 集群,必须创建一个包含集群配置的简单自定义资源。
下面的命令,使用命令行执行此操作:

cat << 'EOF' | kubectl create -f -
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:name: simple
spec:instances: 1postgres:version: 'latest'pods:persistentVolume: size: '5Gi'
EOF# 正常会有如下输出
sgcluster.stackgres.io/simple created

这将使用最新的 PostgreSQL 版本创建一个集群,一个节点,一个 5Gi 的磁盘,使用默认的存储类。
它使用 StackGres 对 PostgreSQL、连接池和资源配置文件的默认配置。

验证已创建的集群

一个名为 simple 的集群将部署在环境中配置的默认名称空间中(通常是名称空间 default)。

查看创建状态:

kubectl get pods --watch

最后,你应该看到这样的东西:

NAME       READY   STATUS    RESTARTS      AGE
simple-0   6/6     Running   1 (41s ago)   68s

通过 psql 访问 Postgres

要打开 psql 控制台并管理 PostgreSQL 集群,你可以连接到主实例(标签为 role: master 的 pod )的 postgres-util 容器。
在这个快速入门中,我们只有一个 pod,您可以简单地提供它的名称,但是无论您有多少实例,以下命令都可以工作:

kubectl exec -ti "$(kubectl get pod --selector app=StackGresCluster,stackgres.io/cluster=true,role=master -o name)" -c postgres-util -- psql# 正常会有如下输出
psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.postgres=#

Note: 直接通过 postgres-util sidecar 连接将授予您使用 postgres 用户的访问权限。它类似于 sudo -i postgres -c psql

请阅读有关 postgres-util side car 以及 how to connect to the Postgres cluster 的详细信息。

  • https://stackgres.io/doc/latest/administration/cluster/connection/pgutil/
  • https://stackgres.io/doc/latest/administration/cluster/connection/

通过 Kubernetes Services 访问 Postgres

虽然通过 psql 访问集群是一个很好的快速测试,但应用程序通常使用 Kubernetes 服务连接到我们的实例。
为此,需要对访问进行身份验证,这可以通过添加专用的 postgres 用户来实现,或者,对于这个快速入门,通过使用 postgres 用户( Postgres 中的超级用户)来实现。postgres 用户的密码是创建集群时随机生成的。您可以通过获取 key "superuser-password" 从一个名为 cluster 的 secret 中检索它:

kubectl get secret simple --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'# 正常会有如下输出
397a-7aaf-49e3-80d

现在我们可以使用用户 postgres 和刚刚返回的密码进行身份验证。为此,我们已经可以使用一个应用程序,或者,出于测试目的,再次使用 psql,但是从通过 Kubernetes 服务名称连接到 Postgres 的不同容器中:

kubectl run psql --rm -it --image ongres/postgres-util --restart=Never -- psql -h simple postgres postgres
If you don't see a command prompt, try pressing enter.# 397a-7aaf-49e3-80d 此处输入密码即可
# 成功会有如下输出psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.postgres=#

这一次,psql 命令将要求输入密码,这是超级用户的密码。

连接到 UI

现在您对 StackGres 有了更多的了解,您可以轻松地从 UI 管理所有集群了。UI 将要求输入用户名和密码。默认情况下,这些是 admin 和随机生成的密码。您可以运行以下命令获取用户和自动生成的密码:

kubectl get secret -n stackgres stackgres-restapi-admin --template '{{ printf "username = %s\npassword = %s\n" (.data.k8sUsername | base64decode) ( .data.clearPassword | base64decode) }}'# 正常会有如下输出
username = admin
password = 1ba7-235c-4563-8fc

有了凭据,让我们连接到 operator web UI。为此,您可以转发 operator pod 的 HTTPS 端口:

POD_NAME=$(kubectl get pods --namespace stackgres -l "stackgres.io/restapi=true" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward "$POD_NAME" 8443:9443 --namespace stackgres# 正常会有如下输出
Forwarding from 127.0.0.1:8443 -> 9443
Forwarding from [::1]:8443 -> 9443
Handling connection for 8443

然后,您可以在以下地址打开浏览器 localhost:8443/admin/

image

image

清理

要卸载这个演示生成的所有资源,你可以运行:

kubectl delete --ignore-not-found -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

有关更多详细信息,请查看 卸载 部分。

  • https://stackgres.io/doc/latest/administration/uninstall/

此外,请参阅 通过 helm 安装 部分,以改变这些。

  • https://stackgres.io/doc/latest/install/helm/

更多

  • StackGres 1.6,可私有部署的云原生数据库中间件平台工程
  • https://hacker-linner.com
  • https://stackgres.io

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

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

相关文章

Redis 数据结构详解

分类 编程技术 Redis 数据类型分为&#xff1a;字符串类型、散列类型、列表类型、集合类型、有序集合类型。 Redis 这么火&#xff0c;它运行有多块&#xff1f;一台普通的笔记本电脑&#xff0c;可以在1秒钟内完成十万次的读写操作。 原子操作&#xff1a;最小的操作单位&a…

MySql下载和安装

MySql下载和安装 一、概述 MySQL是一个开放源代码的关系型数据库管理系统 &#xff0c;由瑞典MySQL AB&#xff08;创始人Michael Widenius&#xff09;公 司1995年开发&#xff0c;迅速成为开源数据库的 No.1。 二、下载和安装 下载地址&#xff1a;https://dev.mysql.com…

Python编程技巧 – 迭代器(Iterator)

Python编程技巧 – 迭代器(Iterator) By JacksonML Iterator(迭代器)是Python语言的核心概念之一。它常常与装饰器和生成器一道被人们提及&#xff0c;也是所有Python书籍需要涉及的部分。 本文简要介绍迭代器的功能以及实际的案例&#xff0c;希望对广大读者和学生有所帮助。…

Xshell会话文件解密获取密码

Xshell会话文件解密获取密码 开发了一个小工具用于获取已存储的xshell会话密码功能简介截图展示下载地址 开发了一个小工具用于获取已存储的xshell会话密码 在日常开发中&#xff0c;服务器太多&#xff0c;密码记不住。使用xshell管理服务器会话&#xff0c;记住密码&#xf…

Linux网络之连接跟踪 conntrack

一 Linux网络之连接跟踪 conntrack k8s 有关conntrack的分析 ① 什么是连接跟踪 netfilter连接跟踪 conntrack 详述 思考&#xff1a;连接跟踪模块会对哪些协议进行跟踪?TCP、UDP、ICMP、DCCP、SCTP、GRE ② 为什么需要连接跟踪 没有连接跟踪有很多问题是不好解决的&a…

牛客在线编程(SQL大厂面试真题)

1.各个视频的平均完播率_牛客题霸_牛客网 ROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time d…

最大乘积分解(动态规划)

相较于我上一题写的动态规划&#xff0c;这一题比较简单 代码如下&#xff1a; #include<stdio.h>int main(void) {long long n, max[101] {0, 1};scanf("%lld", &n);for(int i 1; i < n; i)max[i] i;for(int i 1; i < n; i)for(int j 1; j &…

springboot数据源配置

springboot数据源配置 数据层解决方案——持久化技术 内置持久化解决方案——jdbcTemplate 内置数据库 H2一般用于测试环境&#xff0c;配置profiels&#xff0c;只在开发阶段使用&#xff0c;让他在上线的时候不走这里就可以了 要使用内嵌的数据库H2,要先导入jar包

设置WPF启动画面

WPF启动时间比较长&#xff0c;总让人觉得程序好像没有启动起来&#xff0c;所以想设置一个启动画面 发现WPF设置启动画面竟然如此的简单 第一步将图片放置在主工程目录下&#xff0c;如下图 第二步 将图片生成属性设置为SplashScreen即可 第三步 启动项目你就看到效果了

MDETR 论文报告

MDETR - Modulated Detection for End-to-End Multi-Modal Understanding MDETR - Modulated Detection for End-to-End Multi-Modal Understanding发现问题主要贡献和创新点主要方法和技术MDETR 的架构损失函数1. 框预测损失2. 软标记预测损失3. 对比对齐损失4. 总损失 实验和…

充电桩新老国标兼容性分析

1、背景介绍 1.1、充电桩相关标准发展历程 1.2、兼容性分析历史 1.3、兼容性分析的目的 1.4、兼容性分析的内容 2、B类协议兼容性分析 2.1、协议分层结构 2.2、链路层分析 2.3、版本协商与链路检测 ## 2.4、传输层分析 2.5、应用层 2.5.1、应用层数据 2.5.2、应用层数据…

链表【1】

文章目录 &#x1f348;2. 两数相加&#x1f34c;1. 题目&#x1f34f;2. 算法原理&#x1f353;3. 代码实现 &#x1f349;445. 两数相加 II&#x1f34d;1. 题目&#x1f350;2. 算法原理&#x1fad0;3. 代码实现 &#x1f348;2. 两数相加 &#x1f34c;1. 题目 题目链接&…

springboot整合easy-es实现数据的增删改查

背景 目前公司的一个老项目&#xff0c;查询贼慢&#xff0c;需要想办法提升一下速度&#xff0c;于是就想到了ES&#xff0c;现在尝试一下将ES整合到项目中来提升检索效率。 ES是基于倒排索引实现的&#xff0c;倒排索引中一个表相当于一个索引&#xff0c;表中的每条记录都…

【【Micro Blaze 的 最后补充 与 回顾 】】

Micro Blaze 的 最后补充 与 回顾 Micro Blaze 最小系统 以 MicroBlaze 为核心、LocalMemory&#xff08;片上存储&#xff09;为内存&#xff0c;加上传输信息使用的 UART串口就构成了嵌入式最小系统。当程序比较简单时&#xff0c;Local Memory 可以作为程序的运行空间以及…

VUE语法--img图片不显示/img的src动态赋值图片显示

1、问题概述 常见情景1&#xff1a;在VUE中使用img显示图片的时候&#xff0c;通过传参的方式传入图片的路径和名称&#xff0c;VUE不加载本地资源而是通过http://localhost:8080/...的地址去加载网络资源&#xff0c;从而出现了图片无法显示的情况。 常见情景2&#xff1a;针…

python装饰器解析(关键点:高阶函数、嵌套函数)(参数化装饰器、类装饰器)

文章目录 Python装饰器解析什么是Python装饰器基础理解 如何创建装饰器&#xff08;关键点&#xff1a;高阶函数、嵌套函数&#xff09;创建基础装饰器 使用装饰器使用示例 装饰器的返回值参数化装饰器创建参数化装饰器语法示例使用示例 类装饰器创建类装饰器语法示例使用示例 …

Javaweb之Vue组件库Element案例异步数据加载的详细解析

4.4.3.6 异步数据加载 4.4.3.6.1 异步加载数据 对于案例&#xff0c;我们只差最后的数据了&#xff0c;而数据的mock地址已经提供&#xff1a;http://yapi.smart-xwork.cn/mock/169327/emp/list 我们最后要做的就是异步加载数据&#xff0c;所以我们需要使用axios发送ajax请…

解决vscode中html部分无法嵌套注释

不管是React项目还是Vue项目&#xff0c;相信你一定遇到过同样的问题&#xff0c;如果想要注释的结构内部也存在注释&#xff0c;那么编译器会报以下问题 使用 HTML-Comment 这个插件即可解决问题 选中需要注释的区域并根据系统输入快捷键&#xff0c;可以发现就算嵌套了注释…

【Windows】如何实现 Windows 上面的C盘默认文件夹的完美迁移

如何实现 Windows 上面的C盘默认文件夹的完美迁移 1. 遇到的问题 在我想迁移C盘的 下载 和 视频 文件夹的时候&#xff0c;遇到了这样的问题&#xff0c;在迁移之后&#xff0c;我显卡录像的视频还是保存到了C盘默认位置里&#xff0c;以及我迁移了 下载 之后下载的盘依然是在…

轻盈悦耳的运动型气传导耳机,还有条夜跑灯,哈氪聆光体验

我平时出门不管是散步、骑行&#xff0c;还是坐公交的时候&#xff0c;都喜欢戴上耳机听音乐&#xff0c;这可以让我放松心情。现在市面上的耳机还是以真无线为主&#xff0c;选择虽多&#xff0c;但不适合户外使用&#xff0c;听不见外界的声音&#xff0c;运动时还容易脱落&a…