案例速成GO操作redis,个人笔记
更多个人笔记:(仅供参考,非盈利)
gitee: https://gitee.com/harryhack/it_note
github: https://github.com/ZHLOVEYY/IT_note
安装redis客户端:go get github.com/redis/go-redis/v9
注意go mod tidy的时候不要import成了"github.com/go-redis/redis" 需要检查一下
基础操作,连接redis和CRUD
package mainimport ("context""fmt""log""time""github.com/redis/go-redis/v9"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", // no password setDB: 0, // use default //password和db如果都是默认值可以不设置,这里展示一下})ctx := context.Background() //创建上下文//测试连接_,err := client.Ping(ctx).Result()if err != nil {log.Fatal("连接失败",err)}fmt.Println("连接成功")///设置键值对err = client.Set(ctx,"user1","Alice",0).Err() //0表示永不过期if err!=nil {log.Fatal("设置键值对失败",err)}fmt.Println("设置了user1=Alice")//获取键值对name,err := client.Get(ctx,"user1").Result()if err!=nil {log.Fatal("获取键值对失败",err)}fmt.Println("user1的值是",name)//设置过期时间(10秒)err = client.SetEx(ctx,"session1","123456",10*time.Second).Err()if err!=nil {log.Fatal("设置过期时间失败",err)}fmt.Println("设置了session1=123456,过期时间为10秒")//等待2秒fmt.Println("等待2秒...")time.Sleep(2*time.Second)// 获取 session 的剩余时间ttl, err := client.TTL(ctx, "session1").Result()if err != nil {log.Fatal("获取过期时间失败", err)}fmt.Printf("session1 剩余时间: %v\n", ttl)//删除键_,err = client.Del(ctx,"user1").Result()if err!=nil {log.Fatal("删除键失败",err)}fmt.Println("删除了user1")//再次获取键值对name, err = client.Get(ctx, "user1").Result()if err == redis.Nil { //如果不存在会返回redis.Nilfmt.Println("user1 不存在") } else if err != nil {log.Fatal("获取键值对失败", err)} else {fmt.Printf("user1的值是: %s\n", name)}
}
- 注意需要传入ctx上下文
- 注意最后有.Result()或者.Err()的特点
- 主题语法和Redis其实是比较像的
操作复杂数据结构(Hash 和 List)
package mainimport ("context""fmt""log""github.com/redis/go-redis/v9"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",})ctx := context.Background() //创建上下文//操作Hash(存储用户对象)user := map[string]interface{}{ //interface{} 表示任意类型,就很方便"name": "Bob","age": 30,}err := client.HSet(ctx, "user2", user).Err()if err != nil {log.Fatal("Hset失败", err)}fmt.Println("存储用户user2")//获取Hashname, err := client.HGet(ctx, "user2", "name").Result()if err != nil {log.Fatal("Hget失败", err)}fmt.Printf("获取用户user2的name:%s\n", name)//操作List(消息队列)queue := "message_queue"err = client.RPush(ctx, queue, "msg1", "msg2", "msg3").Err() //Rpush从列表右端(尾部)插入元素,和Lpush相反if err != nil {log.Fatal("RPush失败", err)}fmt.Println("消息入队到message_queue")//弹出msg, err := client.LPop(ctx, queue).Result()if err != nil {log.Fatal("LPop失败", err)}fmt.Printf("从message_queue弹出消息:%s\n", msg)
}
(一些设置要是输出怪可能是和已经存在的变量名有关,改一下就可以了)
- Hash:HSet 和 HGet 适合存储结构化数据(如用户信息)。
- List:RPush 和 LPop 实现 FIFO 队列,常用作任务队列。
- 实际项目中,Hash 常用于缓存对象,List 用于异步任务处理
发布/订阅(Pub/Sub)
package mainimport ("context""fmt""log""time""github.com/redis/go-redis/v9"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",})ctx := context.Background() //创建上下文//订阅者go func(){ //通过协程持续监听pubsub := client.Subscribe(ctx,"channel1")defer pubsub.Close()for msg := range pubsub.Channel(){ //调用channel方法,获取消息fmt.Printf("收到消息:%s(频道:%s)\n",msg.Payload,msg.Channel)}}()//发布者time.Sleep(1*time.Second) //确保订阅者启动err := client.Publish(ctx,"channel1","hello,Redis").Err()if err != nil{log.Fatal("发布失败",err)}fmt.Println("发布消息成功")//保持运行time.Sleep(2 * time.Second)
}
分布式锁
通过lua脚本等简单了解分布式锁的概念
package mainimport ("context""fmt""log""time""github.com/redis/go-redis/v9"
)func acquireLock(client *redis.Client, ctx context.Context, lockKey string, value string, ttl time.Duration) bool {// 使用 SETNX 命令尝试获取锁result, err := client.SetNX(ctx, lockKey, value, ttl).Result()if err != nil {log.Println("Failed to acquire lock:", err)return false}return result//和SetNX返回值有关,redis中当键不存在时,设置成功,返回 1//SetNX:set if not exist
}func releaseLock(client *redis.Client, ctx context.Context, lockKey, value string) bool {// Lua 脚本确保原子性释放script := `if redis.call("GET", KEYS[1]) == ARGV[1] then return redis.call("DEL", KEYS[1])elsereturn 0end ` // KEYS[1] 是锁的键,ARGV[1] 是锁的值,检查锁的值是否匹配,如果匹配则删除锁result, err := client.Eval(ctx, script, []string{lockKey}, value).Int() //[]string{lockKey} 是 Lua 脚本的参数,value 是锁的值if err != nil {return false}return result == 1
}func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",})ctx := context.Background()lockKey := "mylock"value := "unique_123"ttl := 20 * time.Secondif acquireLock(client, ctx, lockKey, value, ttl) {fmt.Println("获取锁成功")// 模拟业务操作time.Sleep(2 * time.Second)//释放锁if releaseLock(client, ctx, lockKey, value) {fmt.Println("释放锁成功")} else {fmt.Println("释放锁失败")}}else {fmt.Println("获取锁失败")}
}
- 关键在于做到只能释放自己的锁,防止竞争
- 可以用于库存扣减、分布式任务调度
连接池和性能优化
简单了解
包括通过pipeline进行批量输入
package mainimport ("context""fmt""log""sync""time""github.com/redis/go-redis/v9"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",PoolSize: 10,MinIdleConns: 2,MaxRetries: 3,DialTimeout: time.Second * 5, ReadTimeout: time.Second * 3, WriteTimeout: time.Second * 3, })ctx := context.Background()// 批量写入(使用 Pipeline 提升性能)pipe := client.Pipeline()for i := 0; i < 100; i++ { //将命令加入到管道中,但不立即执行pipe.Set(ctx, fmt.Sprintf("key:%d", i), i, time.Second*60)//sprinf形成新的变量比如key:0,key:1,key:2}_, err := pipe.Exec(ctx) //一次性执行所有命令if err != nil {log.Fatal("Pipeline 执行失败:", err)}fmt.Println("批量写入 100 个键完成")// 并发读取var wg sync.WaitGroupfor i := 0; i < 10; i++ {wg.Add(1) // 增加等待组中的计数go func(id int) {defer wg.Add(-1)val, err := client.Get(ctx, fmt.Sprintf("key:%d", i)).Result()if err != nil {log.Printf("读取 key:%d 失败: %v", id, err)return}fmt.Printf("读取 key:%d = %s\n", id, val)}(i)}wg.Wait() // 等待所有协程完成
}
- 接池:PoolSize 和 MinIdleConns 控制连接复用,适合高并发。
- Pipeline:批量执行命令,减少网络开销。
- 并发:使用 goroutine 并发操作,结合 sync.WaitGroup 同步。
- 超时配置:防止网络问题导致阻塞。
相关文章:
案例速成GO操作redis,个人笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 安装redis客户端:go get github.com/redis/go-redis/v9 注意go …...
什么是WebSocket?NGINX如何支持WebSocket协议?
大家好,我是锋哥。今天分享关于【什么是WebSocket?NGINX如何支持WebSocket协议?】面试题。希望对大家有帮助; 什么是WebSocket?NGINX如何支持WebSocket协议? 1000道 互联网大厂Java工程师 精选面试题-Java…...
ssm驾校预约管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 伴随着我国社会的发展,人民生活质量日益提高。在人们出行方式上的体现就是,价格较为昂贵的代步工具——汽车,它的拥有率在我国越来越高了。而汽车的行驶速度很快,并且随着汽车拥有率的增加,城市中行驶和停靠的车…...
babel核心知识点
Babel 是一个 JavaScript 编译器,主要用于将 ECMAScript 2015 版本的代码转换为向后兼容的 JavaScript 代码,以便在旧版本的浏览器或环境中运行。以下是 Babel 的核心知识点: 1. 基本概念 编译器:Babel 本质上是一个编译器&…...
学习笔记(算法学习+Maven)
单调队列优化多重背包 #include <bits/stdc.h> using namespace std; const int M 2010; const int N 20010; int q[N]; int hh 0, tt -1; int f[N]; int g[N]; int v[M], w[M], s[M]; int n, m; int main() { cin >> n >> m; for (int i 1; …...
买币永续合约成全球交易热点,XBIT去中心化交易所平台显著提升市场流动性
在全球加密货币市场日益扩大的背景下,买币永续合约正展现出惊人的增长势头。虽然比特币自2021年黄金时期以来整体兴趣有所减弱,但永续合约市场表现亮眼,专业和机构交易者正从传统日历期货转向这一领域,使得永续合约占据了约66%的未…...
详解 `from datasets import load_dataset`:数据格式、公开数据集与自定义数据集实战指南
在自然语言处理(NLP)和机器学习领域,Hugging Face 的 datasets 库凭借其高效的数据加载和预处理能力成为开发者必备工具。本文通过代码示例详解 load_dataset 的核心用法,涵盖数据格式解析、公开数据集调用和自定义数据集构建。 一、数据格式解析与加载示例 datasets 库支…...
Eclipse 插件开发 1
Eclipse 插件开发 1 1 创建 Eclipse 插件2 特点对比表3 总结对比表 Eclipse 是一个功能强大的集成开发环境(IDE),最初为 Java 开发设计,但现在已经支持多种语言和平台。它的核心优势在于高度可扩展的插件架构,使开发者能够定制开发环境以满足…...
单链表专题(1)
1.什么是链表? 链表是结构体变量与结构体变量连接在一起 2.动态创建一个链表 动态内存申请模块化设计 1.创建链表(创建一个表头表示整个链表) 2.创建结点 3.插入结点 4.删除结点 5.打印遍历链表(测试) 3.创建链…...
[贪心_8] 跳跃游戏 | 单调递增的数字 | 坏了的计算器
目录 1.跳跃游戏 题解 2.单调递增的数字 证明 3.坏了的计算器 题解 解法一:正向推导 解法二:正难则反 1.跳跃游戏 链接: 55. 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你…...
Python基于Django的全国二手房可视化分析系统【附源码】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
Spring Boot 升级指南(2.x → 3.x)
🚀 Spring Boot 升级指南(2.x → 3.x) 🔢 1️⃣ 必读文档 📘 当您需要从 Spring Boot 2.x 升级时: • 官方迁移指南 → https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-…...
基于亚马逊云科技构建音频转文本无服务器应用程序
Amazon Transcribe是一项基于机器学习模型自动将语音转换为文本的服务。它提供了多种可以提高文本转录准确性的功能,例如语言自定义、内容过滤、多通道音频分析和说话人语音分割。Amazon Transcribe 可用作独立的转录服务,也可以集成到应用程序中提供语音…...
io_uring概述:现代 Linux 异步 IO 的新范式
一、引言 在 Linux 系统中,I/O 性能一直是高性能服务器、数据库、存储系统的关键瓶颈。传统的 I/O 接口(如 read、write、poll、epoll)已经难以满足现代高吞吐低延迟场景的需求。io_uring 的诞生,正是为了解决这些传统 I/O 模型中…...
定制一款国密浏览器(12):分析SM2签名算法的实现
SM2 是一种非对称加密算法,除了用来进行加密解密外,主要作用还用作数字签名。数字签名是私钥签名,公钥用来验签。由于私钥是不公开的,所以私钥签名还可以防抵赖。 一般的签名流程如下: 发送者对消息计算摘要值。发送者用私钥对摘要值进行签名得到签名值。发送者将原始消息…...
SSE协议
目录 SSE协议协议实现传输格式data 字段id 字段event 字段retry 字段 前后端实现使用案例FastAPI SSE-STARLETTE 模拟大模型推理流🖥 代码:FastAPI SSE-STARLETTE 模拟大模型推理流 SSE协议 SSE,全称是 Server-Sent Events,是一…...
精益数据分析(25/126):关键指标驱动业务发展
精益数据分析(25/126):关键指标驱动业务发展 在创业和数据分析的道路上,我们都在不断探索如何利用数据实现业务的增长与优化。今天,让我们一起深入学习《精益数据分析》中的关键知识点,通过实际案例来理解…...
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
前言 Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。 项目地址 gitcode平台:ht…...
git 工具
Git教程 Git Bash详细教程 Git教程 Git Bash详细教程-CSDN博客 Download – TortoiseGit – Windows Shell Interface to Git...
利用【指针引用】对【非空单循环链表】进行删除操作
【非空单循环链表】是链式存储结构的其中一种,下面是各个词汇的意思: 先说【单】的意思: 这里指的是【单循环】的,另外在别的地方你会碰到一些不一样的循环链表,比如说是【多重链】的。 单循环 【单循环链表】常在表的…...
2025.4.26_STM32_SPI
1.SPI简介 2.硬件电路 所有SPI设备的SCK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)分别连在一起。SCK线只能被主机控制,和I2C相同。 主机另外引出多条SS控制线,分别接到各从机的SS引脚 (SS不用的时候为高电平,当主机需要选中某…...
基于OpenMV+STM32+OLED与YOLOv11+PaddleOCR的嵌入式车牌识别系统开发笔记
基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记 基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记系统架构全景 一、实物演示二、OpenMV端设计要点1. 硬件配置优化2. 智能帧率控制算法3. 数据传输协议设计 三、PyTorch后端核心实现:YOLOv11与PaddleOCR的…...
当JIT遇见K8s
目录 一、技术融合背景:从静态架构到动态生态的范式重构 1.1 动态编译技术的三次进化浪潮 1.2 容器编排系统的动态特性解剖 弹性伸缩的数学建模 服务质量(QoS)的编译场景适配 硬件拓扑感知的编译优化 二、关键技术挑战与突破性解决方案…...
单片机-89C51部分:4、固件烧录
飞书文档https://x509p6c8to.feishu.cn/wiki/M00gwFX3WilLe0kiAmBcPBUsnLc 接线 通过USB线把开发板和电脑连接起来,如果电脑没有安装过USB转串口驱动,在设备管理器中就找不到COM口,而且会有驱动提示叹号,我们可以下载下方驱动安…...
7.13 GitHub Sentinel全链路测试实战:自动化框架+零误差传输,QPS提升6倍!
GitHub Sentinel全链路测试实战:自动化框架+零误差传输,QPS提升6倍 GitHub Sentinel Agent 用户界面设计与实现 关键词:前后端联调测试、数据传输验证、接口稳定性测试、命令行工具测试、自动化测试框架 测试前后端功能与数据传输稳定性 1. 全链路测试策略设计 采用分层…...
stm32之EXIT外部中断详解
目录 1.引入: STM32F1031.1 中断路径上的3个部件1.2 STM32F103的GPIO中断1.1.1 GPIO控制器 -- AFIO1.1.2 EXTI1.1.3 NVIC1.1.4 CPU1. PRIMASK2. FAULTMASK3. BASEPRI 1.3 中断执行流程 2.旋转编码器介绍3.实验3.1 EXIT3.1.1 结构体3.1.2 函数 3.2 NVIC3.2.1 结构体3.2.2 函数 3…...
STM32 开发 - stm32f10x.h 头文件(内存映射、寄存器结构体与宏、寄存器位定义、实现点灯案例)
概述 STM32F10x.h 是 STM32F1 系列微控制器的核心头文件,提供了所有外设寄存器的定义和内存映射 一、内存映射 #define PERIPH_BASE ((uint32_t)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE 0x…...
UniApp 的现状与 WASM 支持的迫切性
一、UniApp 的跨平台优势与性能瓶颈 UniApp 凭借“一次开发,多端发布”的核心理念,已成为跨平台开发的主流框架之一。然而,随着移动应用场景的复杂化(如 3D 渲染、音视频处理、AI 推理),传统的 JavaScript…...
Prometheus、Zabbix和Nagios针对100个节点的部署设计架构图
一、Prometheus 架构图(联邦集群+分布式存储) graph TD;subgraph 全局监控层GlobalProm[Prometheus Server] -->|联邦查询| RegionalProm1[区域Prometheus]GlobalProm -->|联邦查询| RegionalProm2[区域Prometheus]GlobalProm -->|联邦查询| RegionalProm3[区域Pro…...
坚果派已适配的鸿蒙版flutter库【持续更新】
坚果派已适配的鸿蒙版flutter库 序号原仓版本适配仓文章解读是否完成1https://pub.dev/packages/fluttertoast8.2.12https://gitcode.com/nutpi/FlutterToasthttps://www.nutpi.net/thread?topicId1575是2https://pub.dev/packages/flutter_udid4.0.0https://gitcode.com/nut…...
代码随想录打卡|Day28 动态规划(理论基础、斐波那契数列、爬楼梯、使用最小花费爬楼梯)
动态规划 Part01 理论基础 代码随想录讲解链接 视频讲解链接 斐波那契数 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一…...
《USB技术应用与开发》第四讲:实现USB鼠标
一、标准鼠标分析 1.1简介 1.2页面显示 其中页面显示的“”不用管它,因为鼠标作为物理抓包,里面有时候会抓到一些错误,不一定是真正的通讯错误,很可能是本身线路接触质量不好等原因才打印出来的“”。 1.3按下鼠标左键 &#x…...
elk中kibana一直处于可用和降级之间且es群集状态并没有问题的解决方法
前言 在公司部elk的时候发现kibana的web界面一直很卡,数据量为0也会很卡,es群集状态正常,资源足够。 报错信息 [2025-03-17T09:54:50.19400:00][INFO ][status] Kibana is now available (was degraded) [2025-03-17T09:55:03.28000:00][I…...
2025.4.26总结
今天把马良老师的《职场十二法则》看完后,感触极大,这们课程就是一场职场启蒙课。 虽然看过不少关于职场的书籍,但大多数是关于职场进阶,方法方面的。并没有解答“面对未来二三十年的职场生涯,我该怎么去看待自己的工…...
一、UI自动化测试01--认识和元素定位方法
目录 一、自动化测试1. 自动化应用场景2. ⾃动化测试的优缺点3. ⾃动化测试的分类 二、UI ⾃动测试1. 适合使用的项目2. 实现时机3. 常⻅的UI⾃动化测试⼯具4. Selenium 框架5. Web ⾃动化环境部署6. Web ⾃动化基本代码 二、元素定位1. 浏览器开发者⼯具⽅法1: 直接获取信息⽅…...
目标检测原理简介
目标检测是一类计算机视觉任务,简单来说,目标检测可被定义为在计算机中输入一张图像,计算机需要找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,如图一所示。目标检测是计算机视觉领域的核心问题之一,相较于最原始的将整张图片分类为某一类别,目标检测不光可…...
软件设计原则
开闭原则 对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。 想要达到这样的效果,需要使用接口和抽象类。 因…...
Postman脚本处理各种数据的变量
一、变量是字符串里列表, 如 "["100","101","102","103","108"]" //把字符串的变量处理成列表 var myListJSON.parse(pm.environment.get(giftTabId)) #giftTabId变量名 //设置随机取值 var rando…...
嵌入式硬件开发工具---万用表---示波器---仿真器
万用表 主要功能: 测量交直流电压、电流 测量电阻、二级管及电路通断 其他----电容、频率、温度----特殊的万用表 * 检查电路是否正常 * 检查电路连接情况 示波器 主要功能: 以波形展示电信号随时间变化的关系 主要指标: 带宽---大…...
数据预处理之特征选择 (Feature Selection)
哈喽,大家好,我是我不是小upper~ 今天的文章和大家来聊聊数据与处理方法中常用的特征选择 在开始说特征选择前,咱们先搞清楚这个所谓的“特征”到底是啥玩意儿。 打个比方说,如果我们要训练一个模型来判断某个人是否会买一双运…...
Java基础 — 循环
介绍 Java基础循环是程序流程控制的核心结构,主要用于重复执行特定代码块。常见的循环包括for、while和do-while三种形式,开发者可根据不同场景灵活选择。 合理使用循环关键字能有效提升代码执行效率。掌握循环结构的核心在于理解执行流程与条件判断的时…...
参考平面的宽度-信号与电源完整性分析
参考平面的宽度: 计算特征阻抗时假设参考平面是无限宽的平面。在参考平面的宽度远大于线宽或介质厚度时,这种假设是正确的。但是PCB板上的参考平面经常被反焊盘掏空,当互连线经过参考平面掏空区域附近时,掏空的局部互连线参考平面变窄&#x…...
【Linux】Centos7 安装 Docker 详细教程
一、安装步骤 步骤一:确定你是Centos7及以上的版本 cat /etc/redhat-release 步骤二:卸载旧版本 查看官方文档:CentOS | Docker Docs 步骤三:安装GCC等工具 1.首先确保 CentOS7 能上外网 ping www.baidu.com 2.更新 Centos7…...
开源AI智能名片链动2+1模式S2B2C商城小程序源码赋能下的社交电商创业者技能跃迁与价值重构
摘要:在移动互联网深度重构商业生态的背景下,社交电商创业者面临流量成本攀升、用户粘性不足、供应链协同低效等核心痛点。本文以“开源AI智能名片链动21模式S2B2C商城小程序源码”技术体系为研究对象,通过分析其技术架构、商业逻辑及实战案例…...
计算机视觉与深度学习 | LSTM原理及与卡尔曼滤波的融合
长短期记忆网络(LSTM)是一种特殊的循环神经网络(RNN),旨在解决传统RNN在处理长序列数据时出现的梯度消失和梯度爆炸问题。以下为你详细介绍其基本原理: 核心思想:LSTM的核心思想是引入记忆单元和门控机制来控制信息的流动,从而解决传统RNN的梯度消失问题。记忆单元类似…...
阿里云域名智能解析至国内外AWS的合规化部署指南
引言 随着全球化业务的发展,企业常面临地域合规性与用户体验优化的双重挑战。本文以阿里云域名解析为核心,结合AWS中国区(北京/宁夏)与Global区域部署,提供一套完整的解决方案,实现: 智能流量调度:国内用户访问AWS中国区,海外用户自动路由至AWS Global全链路合规:满…...
一、鸿蒙编译篇
一、下载源码和编译 https://blog.csdn.net/xusiwei1236/article/details/142675221 https://blog.csdn.net/xiaolizibie/article/details/146375750 https://forums.openharmony.cn/forum.php?modviewthread&tid897 repo init -u https://gitee.com/openharmony/mani…...
计算机网络 | 应用层(3)-- 因特网中的电子邮件
💓个人主页:mooridy 💓专栏地址:《计算机网络:自定向下方法》 大纲式阅读笔记 关注我🌹,和我一起学习更多计算机的知识 🔝🔝🔝 目录 3. 因特网中的电子邮件 …...
Missashe考研日记-day27
Missashe考研日记-day27 0 写在前面 博主昨晚有事所以没学专业课,白天学了其他科,但是觉得不太好写博客,就合在今天一起写好了。 1 专业课408 学习时间:3h30min学习内容: 今天把内存管理部分剩下的关于分页分段和段…...
【Castle-X机器人】五、物联网模块配置与调试
持续更新。。。。。。。。。。。。。。。 【Castle-X机器人】五、物联网模块配置与调试 五、物联网模块配置与调试5.1 物联网模块调试物联网模块测试:控制物联网模块:物联网模块话题五、物联网模块配置与调试 5.1 物联网模块调试 调试前需确保Castle-x与mqtt主机服务器处于同…...