PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
TaskPHP是一个基于PHP的定时任务框架,它提供了一个简单、灵活且易于使用的解决方案,用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍:
- 简单易用:TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置和编写任务代码,即可轻松实现定时任务的执行。
- 高性能:TaskPHP采用高效的任务调度算法,确保任务能够按照预定的时间准确执行。同时,它还支持并发执行多个任务,提高了任务的执行效率。
- 灵活配置:TaskPHP允许用户通过配置文件或代码来定义任务的执行时间、执行间隔、执行次数等参数。用户可以根据自己的需求灵活配置任务。
- 可扩展性:TaskPHP框架具有良好的扩展性,用户可以根据自己的需求添加自定义的任务类型或扩展功能。此外,它还支持与其他PHP框架或库进行集成,方便用户在现有项目中使用。
- 日志记录:TaskPHP提供了日志记录功能,可以记录任务的执行过程、执行结果以及错误信息等。这有助于用户监控任务的执行情况,及时发现问题并进行处理。
- 任务管理:框架提供了任务管理的功能,用户可以查看当前正在执行的任务、已完成的任务以及任务执行的历史记录。这有助于用户对任务进行监控和管理。
TaskPHP是一个功能强大、易于使用的PHP定时任务框架,适用于各种需要定时执行任务的场景。无论是简单的定时发送邮件、定时更新数据,还是复杂的定时爬虫、定时数据分析等任务,TaskPHP都能提供有效的解决方案。
关键环境感知任务记录
<?phpnamespace cron;use taskphp\Utils;require 'taskDb.php';class Service2
{/** 关键环境安全-定时任务* $service_id,定时任务服务路由ID* */public static function getTask($service_id){global $CONF, $serviceArr;$CONF = require '../conf/config.php';require '../conf/config.service.php';$serviceArr = getByServiceId($lock_service, $service_id);Utils::log('Task-ID: ' . $service_id);//数据信息$school_id = $serviceArr['school_id'];$school_type = $serviceArr['school_type'];$school_attribute = $serviceArr['school_attribute'];$school_short_name = $serviceArr['school_short_name'];$service_group = $serviceArr['service_group'];$service_protocol = $serviceArr['service_protocol'];$service_url = $serviceArr['service_url'];$url = $service_protocol . $service_url . '/service/page/sensor/simple.json';$dataPramas = ["group_id" => $service_group];$res = curlIotOnlyAPI($url, '1', '1000', $CONF['iot_token'], $dataPramas);//Utils::log('Task-content: ' . $res);$reArr = json_decode($res, true);if ($reArr && $reArr["data"] && $reArr["data"]["data"] && $reArr["data"]["data"][0]) {$keyData = $reArr["data"]["data"];$environment_area = $reArr["data"]["data"][0]['device'];//插入数据库;Utils::db()->table("environment")->ifInsert(array('task_code' => encodeId($school_id . '-' . $service_id),'service_id' => $service_id,'school_id' => $school_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'environment_area' => $environment_area,'environment_temperature' => getSDataByPropertyType($keyData, '温度'),'environment_temperature_state' => getStatusBySensorStatus($keyData, '温度'),'environment_humidity' => getSDataByPropertyType($keyData, '湿度'),'environment_humidity_state' => getStatusBySensorStatus($keyData, '湿度'),'environment_air' => getSDataByPropertyType($keyData, '空质'),'environment_air_state' => getStatusBySensorStatus($keyData, '空质'),'environment_time' => time()),array('service_id' => $service_id,'school_id' => $school_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'environment_area' => $environment_area,'environment_temperature' => getSDataByPropertyType($keyData, '温度'),'environment_temperature_state' => getStatusBySensorStatus($keyData, '温度'),'environment_humidity' => getSDataByPropertyType($keyData, '湿度'),'environment_humidity_state' => getStatusBySensorStatus($keyData, '湿度'),'environment_air' => getSDataByPropertyType($keyData, '空质'),'environment_air_state' => getStatusBySensorStatus($keyData, '空质'),'environment_time' => time()));//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '关键环境安全',"task_status" => '服务路由ID(' . $service_id . ')API组ID(' . $service_group . ')-数据更新成功,STATUS:OK',"task_time" => time()));} else {//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '关键环境安全',"task_status" => 'API组ID:' . $service_group . '接口出错,无法爬取数据,STATUS:Fail',"task_time" => time()));die();}//返回数据;return true;}
}
用电计量管理任务记录
<?phpnamespace cron;use taskphp\Utils;require 'taskDb.php';class Service3
{/** 用电计量管理-定时任务* $service_id,定时任务服务路由ID* */public static function getTask($service_id){global $CONF, $serviceArr;$CONF = require '../conf/config.php';require '../conf/config.service.php';$serviceArr = getByServiceId($lock_service, $service_id);Utils::log('Task-ID: ' . $service_id);//数据信息$school_id = $serviceArr['school_id'];$school_type = $serviceArr['school_type'];$school_attribute = $serviceArr['school_attribute'];$school_short_name = $serviceArr['school_short_name'];$service_group = $serviceArr['service_group'];$service_protocol = $serviceArr['service_protocol'];$service_url = $serviceArr['service_url'];$url = $service_protocol . $service_url . '/service/page/sensor/calc/data.json';$dataPramas = ["group_id" => $service_group, 'propertyTypeVal' => '电量'];$res = curlIotOnlyAPI($url, '1', '1000', $CONF['iot_token'], $dataPramas);//Utils::log('Task-content: ' . $res);$reArr = json_decode($res, true);if ($reArr && $reArr["data"] && $reArr["data"]["data"] && $reArr["data"]["data"][0]) {$powerData = $reArr["data"]["data"][0]["odata"];$MonthsArr = generatePastMonths(13);//月份$powerArr = [formatNumber($powerData['prev_0_month_val_diff']),formatNumber($powerData['prev_1_month_val_diff']),formatNumber($powerData['prev_2_month_val_diff']),formatNumber($powerData['prev_3_month_val_diff']),formatNumber($powerData['prev_4_month_val_diff']),formatNumber($powerData['prev_5_month_val_diff']),formatNumber($powerData['prev_6_month_val_diff']),formatNumber($powerData['prev_7_month_val_diff']),formatNumber($powerData['prev_8_month_val_diff']),formatNumber($powerData['prev_9_month_val_diff']),formatNumber($powerData['prev_10_month_val_diff']),formatNumber($powerData['prev_11_month_val_diff']),formatNumber($powerData['prev_12_month_val_diff'])];//对应月份的数据//插入数据库;/* Utils::db()->table("electricity")->ifInsert(array('school_id' => $school_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'electricity_month' => $MonthsArr[0],'electricity_norm' => $powerArr[0],'electricity_time' => time()),array('school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'electricity_norm' => $powerArr[0],'electricity_time' => time()));*/for ($i = 0; $i < count($MonthsArr); $i++) {$row_sec = Utils::db()->table("electricity")->where(array('school_id' => $school_id, 'electricity_month' => $MonthsArr[$i]))->limit(1)->order("school_id DESC")->select();if (!$row_sec) {//插入数据Utils::db()->table("electricity")->add(array('school_id' => $school_id,'service_id' => $service_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'electricity_month' => $MonthsArr[$i],'electricity_norm' => $powerArr[$i],'electricity_time' => time()));} else {//更新数据Utils::db()->table("electricity")->where(array('school_id' => $school_id, 'electricity_month' => $MonthsArr[$i]))->update(array('service_id' => $service_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'electricity_norm' => $powerArr[$i],'electricity_time' => time()));}}//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '用电计量管理',"task_status" => '服务路由ID(' . $service_id . ')API组ID(' . $service_group . ')-数据更新成功,STATUS:OK',"task_time" => time()));} else {//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '用电计量管理',"task_status" => 'API组ID:' . $service_group . '接口出错,无法爬取数据,STATUS:Fail',"task_time" => time()));die();}//返回数据;return true;}
}
用水计量管理任务记录
<?phpnamespace cron;use taskphp\Utils;require 'taskDb.php';class Service4
{/** 用水计量管理-定时任务* $service_id,定时任务服务路由ID* */public static function getTask($service_id){global $CONF, $serviceArr;$CONF = require '../conf/config.php';require '../conf/config.service.php';$serviceArr = getByServiceId($lock_service, $service_id);Utils::log('Task-ID: ' . $service_id);//数据信息$school_id = $serviceArr['school_id'];$school_type = $serviceArr['school_type'];$school_attribute = $serviceArr['school_attribute'];$school_short_name = $serviceArr['school_short_name'];$service_group = $serviceArr['service_group'];$service_protocol = $serviceArr['service_protocol'];$service_url = $serviceArr['service_url'];$url = $service_protocol . $service_url . '/service/page/sensor/calc/data.json';$dataPramas = ["group_id" => $service_group, 'propertyTypeVal' => '总流量'];$res = curlIotOnlyAPI($url, '1', '1000', $CONF['iot_token'], $dataPramas);//Utils::log('Task-content: ' . $res);$reArr = json_decode($res, true);if ($reArr && $reArr["data"] && $reArr["data"]["data"] && $reArr["data"]["data"][0]) {$powerData = $reArr["data"]["data"][0]["odata"];$MonthsArr = generatePastMonths(13);//月份$powerArr = [formatNumber($powerData['prev_0_month_val_diff']),formatNumber($powerData['prev_1_month_val_diff']),formatNumber($powerData['prev_2_month_val_diff']),formatNumber($powerData['prev_3_month_val_diff']),formatNumber($powerData['prev_4_month_val_diff']),formatNumber($powerData['prev_5_month_val_diff']),formatNumber($powerData['prev_6_month_val_diff']),formatNumber($powerData['prev_7_month_val_diff']),formatNumber($powerData['prev_8_month_val_diff']),formatNumber($powerData['prev_9_month_val_diff']),formatNumber($powerData['prev_10_month_val_diff']),formatNumber($powerData['prev_11_month_val_diff']),formatNumber($powerData['prev_12_month_val_diff'])];//插入数据库;for ($i = 0; $i < count($MonthsArr); $i++) {$row_sec = Utils::db()->table("water")->where(array('school_id' => $school_id, 'water_month' => $MonthsArr[$i]))->limit(1)->order("school_id DESC")->select();if (!$row_sec) {//插入数据Utils::db()->table("water")->add(array('school_id' => $school_id,'service_id' => $service_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'water_month' => $MonthsArr[$i],'water_norm' => $powerArr[$i],'water_time' => time()));} else {//更新数据Utils::db()->table("water")->where(array('school_id' => $school_id, 'water_month' => $MonthsArr[$i]))->update(array('service_id' => $service_id,'school_type' => $school_type,'school_attribute' => $school_attribute,'school_short_name' => $school_short_name,'water_norm' => $powerArr[$i],'water_time' => time()));}}//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '用水计量管理',"task_status" => '服务路由ID(' . $service_id . ')API组ID(' . $service_group . ')-数据更新成功,STATUS:OK',"task_time" => time()));} else {//系统日志Utils::db()->table("task_log")->add(array("school_short_name" => $school_short_name,"task_name" => '用水计量管理',"task_status" => 'API组ID:' . $service_group . '接口出错,无法爬取数据,STATUS:Fail',"task_time" => time()));die();}//返回数据;return true;}
}
记录日志
使用第三方爬中仅记录启动和结束任务日志
[2024-03-29 20:22:54.83456200][DEBUG]:distribute_listen daemon pid:383131 Start
[2024-03-29 20:22:55.83205600][DEBUG]:worker_listen daemon pid:383134 Start
[2024-03-29 20:22:56.83395000][DEBUG]:worker_listen daemon pid:383135 Start
[2024-03-29 20:22:57.83637100][DEBUG]:worker_listen daemon pid:383136 Start
[2024-03-29 20:22:58.83940500][DEBUG]:worker_listen daemon pid:383137 Start
[2024-03-29 20:22:59.83934000][DEBUG]:worker_listen daemon pid:383138 Start
[2024-03-29 20:23:00.84222100][DEBUG]:worker_listen daemon pid:383139 Start
[2024-03-29 20:23:01.84334700][DEBUG]:worker_listen daemon pid:383140 Start
[2024-03-29 20:23:02.84479600][DEBUG]:worker_listen daemon pid:383141 Start
[2024-03-29 20:30:01.04360000][DEBUG]:cron\Task14::run [--START--]
[2024-03-29 20:30:01.04501700][DEBUG]:Service-ID: 31
[2024-03-29 20:30:07.56411000][DEBUG]:cron\Task14::run [--END--][RunTime:6.520488s]
[2024-03-29 20:31:01.07364600][DEBUG]:cron\Task15::run [--START--]
[2024-03-29 20:31:01.07523800][DEBUG]:Service-ID: 30
[2024-03-29 20:31:01.85611800][DEBUG]:cron\Task15::run [--END--][RunTime:0.782444s]
[2024-03-29 20:32:01.12884500][DEBUG]:cron\Task6::run [--START--]
[2024-03-29 20:32:01.13076100][DEBUG]:Service-ID: 34
[2024-03-29 20:32:01.69706000][DEBUG]:cron\Task6::run [--END--][RunTime:0.568220s]
taskPHP自带Utils工具,会产生具体的日志记录
[2024-03-28 00:03:01.41235800][DEBUG]:cron\Task14::run [--START--]
[2024-03-28 00:03:01.41251000][DEBUG]:Task-ID: 31
[2024-03-28 00:03:07.83297000][DEBUG]:cron\Task14::run [--END--][RunTime:6.420764s]
[2024-03-28 00:05:00.89040200][DEBUG]:cron\Task10::run [--START--]
[2024-03-28 00:05:00.89097900][DEBUG]:Task-ID: 35
[2024-03-28 00:05:01.04386100][DEBUG]:cron\Task6::run [--START--]
[2024-03-28 00:05:01.04441500][DEBUG]:Task-ID: 34
[2024-03-28 00:05:01.42001300][DEBUG]:SQL:DESC po_environment[bind_value:null][RunTime:0.059952s]
[2024-03-28 00:05:01.49280500][DEBUG]:SQL:INSERT INTO `po_environment` SET `task_code`=:task_code,`service_id`=:service_id,`school_id`=:school_id,`school_type`=:school_type,`school_attribute`=:school_attribute,`school_short_name`=:school_short_name,`environment_area`=:environment_area,`environment_temperature`=:environment_temperature,`environment_temperature_state`=:environment_temperature_state,`environment_humidity`=:environment_humidity,`environment_humidity_state`=:environment_humidity_state,`environment_air`=:environment_air,`environment_air_state`=:environment_air_state,`environment_time`=:environment_time ON DUPLICATE KEY UPDATE `service_id`=:service_id_1,`school_id`=:school_id_2,`school_type`=:school_type_3,`school_attribute`=:school_attribute_4,`school_short_name`=:school_short_name_5,`environment_area`=:environment_area_6,`environment_temperature`=:environment_temperature_7,`environment_temperature_state`=:environment_temperature_state_8,`environment_humidity`=:environment_humidity_9,`environment_humidity_state`=:environment_humidity_state_10,`environment_air`=:environment_air_11,`environment_air_state`=:environment_air_state_12,`environment_time`=:environment_time_13[bind_value:null][RunTime:0.072542s]
@漏刻有时
相关文章:
PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
TaskPHP是一个基于PHP的定时任务框架,它提供了一个简单、灵活且易于使用的解决方案,用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍: 简单易用:TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置…...

图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力
电动两轮车不仅为当今生活提供了便利,更是一种健康和绿色的出行方式。想象一下,在经过一整晚的充分休息,骑上爱车,满血复活的准备开始新的一天。您会愿意带着如何给心爱的两轮车充电的担心开始这一天吗? 随着越来越…...

动态规划-----背包类问题(0-1背包与完全背包)详解
目录 什么是背包问题? 动态规划问题的一般解决办法: 0-1背包问题: 0 - 1背包类问题 分割等和子集: 完全背包问题: 完全背包类问题 零钱兑换II: 什么是背包问题? 背包问题(Knapsack problem)是一种…...
通过 Docker 搭建 BookStack
文章目录 环境说明1、官方网站2、通过 Docker 部署总结 环境说明 操作系统版本:CentOS Linux release 7.9.2009 (Core) Docker 版本:Docker Engine - Community 24.0.2 BookStack 版本:23.02.3 MySQL 版本:8.0.32 1、官方网站 G…...
通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
Java虚拟机(Java Virtual Machine, JVM)是一种软件实现的抽象计算机,它负责执行Java字节码(Bytecode)。Java程序并不是直接在物理计算机上运行,而是先由Java编译器将源代码编译成与平台无关的字节码&#x…...
[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)
使用Shell脚本实现功能: kubectl执行失败后,等待30秒后再重试,一共重试3次,代码如下: #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…...
java中的static和单例模式
同一个类中,访问其类成员,可以省略类名不写 static:叫静态,可以修饰成员变量,成员方法。 成员变量按照有无static修饰,分为两种: 类变量:有static修饰,属于类…...
RabbitMQ相关总结
Broker 异步调用中用Broker进行事件订阅和调用,完成解耦 没有强依赖,不用担心级联失败 流量削峰 MQ 的下载 1.可以使用命令拉取镜像 docker pull rabbitmq:3-management 2.也可以直接去官网下载tar包,然后上传到虚拟机上面 spring AMQP…...

RAFT: Adapting Language Model to Domain Specific RAG
今天来介绍下伯克利大学3.15日新发的一篇paper,RAFT: Adapting Language Model to Domain Specific RAG 主要研究了如何构造训练数据来微调你的LLM,从而在LLM在垂直领域的RAG中表现更好。并且开源了代码:GitHub - ShishirPatil/gorilla: Gorilla: An API store for LLMs 主…...

第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯
【问题描述】 小蓝要上一个楼梯,楼梯共有 n 级台阶(即小蓝总共要走 n 级)。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端?【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…...
第四题:星期一
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 整个 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日之间),一共有多少个星期一?(不要告诉我你不知道今天是星期几…...

Mamba: Linear-Time Sequence Modeling with Selective State Spaces(论文笔记)
What can I say? 2024年我还能说什么? Mamba out! 曼巴出来了! 原文链接: [2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces (arxiv.org) 原文笔记: What: Mamba: Linear-Time …...
2024蓝桥杯每日一题(区间DP)
备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:游戏 试题二:石子合并 试题三:密码脱落 试题四:能量项链 试题一:游戏 【题目描述】 玩家一和玩家二共同玩一个小游戏。给定一个包含 N 个…...
LeetCode-2952. 需要添加的硬币的最小数量【贪心 数组 排序】
LeetCode-2952. 需要添加的硬币的最小数量【贪心 数组 排序】 题目描述:解题思路一:看提示主要是用贪心和排序。那我们肯定是首先对coins排序。然后依次遍历coins[i],获取当前可以获取金额范围,和判断是否加入新硬币。判断规则如下…...

新书速递——《可解释AI实战(PyTorch版)》
本书旨在帮助你实施最新的可解释AI技术,以构建公平且可解释的AI系统。可解释AI是当今AI研究中的热门话题,但只有少数资源和指南涵盖了所有重要技术,这些技术对实践者来说非常有价值。本书旨在填补这一空白。 本书读者对象 本书既适合那些有兴…...

国产数据库中统计信息自动更新机制
数据库中统计信息描述的数据库中表和索引的大小数以及数据分布状况,统计信息的准确性对优化器选择执行计划时具有重要的参考意义。本文简要整理了下传统数据库和国产数据库中统计信息的自动更新机制,以加深了解。 1、数据库统计信息介绍 优化器是数据库…...

【C++】入门C++(中)
好的,我们继续,这是 C专栏的第二篇博客,还没读过上一篇博客可以进入我创建的专栏阅读 入门C(上)再回来哦~ 下面我们要讲的第一个概念就是函数重载 函数重载 1. 函数重载概念 什么是函数重载? 简单来说…...

javaIO
file类 一个File类的对象可以表示一个具体的文件或目录 mkdir 创建单级文件夹 mkdirs 创建多级文件夹 delete 删除一个文件夹时,文件夹里面必须是空的 listfiles 将文件夹的子集放到一个file类型的数组中 输入及输出的概念 输入input 输出output 把jav…...

睿尔曼超轻量仿人机械臂之复合机器人底盘介绍及接口调用
机器人移动平台是一个包含完整成熟的感知、认知和定位导航能力的轮式机器人底盘产品级平台,产品致力于为各行业细分市场的商用轮式服务机器人提供一站式移动机器人解决方案,让合作伙伴专注在核心业务/人机交互的实现。以下是我司产品双臂机器人以及复合升…...

用JSch实现远程传输文件并打包成jar
本文将简单介绍一下 JSch 这个Java的第三方库的一个简单用法,并以此为实例,讲解 IntelliJ 中打包成 jar 包的2种方式。 实现目标 我们的目标是,做出一个jar包,它能够实现类似于 scp 命令的远程传输文件的功能。用法如下…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...