初识Redis · C++客户端string
目录
前言:
string的API使用
set get:
expire:
NX XX:
mset,mget:
getrange setrange:
incr decr
前言:
在前文,我们已经学习了Redis的定制化客户端怎么来的,以及如何配置好Redis定制化客户端,并且简单学习了一下RESP,其实也就是了解了一下为什么Redis可以定制化客户端而已,那么,我们现在有了Redis定制化客户端的条件,我们自然就可以使用大佬们封装好的Redis的API了。
那么在本文呢,我们涉及到的是string,list和hash的多组API,因为我们是在命令行敲过的,所以学习起来也是非常快的了。
废话不多说,进入主题吧!
string的API使用
对于string的API使用,我们大致分为了 set get expire mset mget getrange setrange incr decr,大致就这么多命令,因为其他命令其实也大差不差,我们就使用过这些也都清楚了。
set get:
我们创建好了redis对象之后,啥也不管,直接set,我们可以看到它的参数还是挺多的,但是当我们一看,第一个参数是key,第二个参数是val,第三个参数是chrno的时间,这不就是存活时间吗,第四个参数是一些设置,比如NX,XX等。
这样一看是非常清楚的了。
但是我们发现set的参数是Stringview类型的,这个类型和string类型来说最大的区别就是这个类型是只读的,我们可以通过阅读源码简单了解:
begin() const noexcept{ return this->_M_str; }constexpr const_iteratorend() const noexcept{ return this->_M_str + this->_M_len; }constexpr const_iteratorcbegin() const noexcept{ return this->_M_str; }constexpr const_iteratorcend() const noexcept{ return this->_M_str + this->_M_len; }
这里是它经过重重封装后的源码,我们可以发现它的迭代器都是const类型,也就是不允许我们修改*this了,它即只读的。
因为是只读的,所以针对只读的这个操作做了很多优化,效率就比普通的std::string快了。当然了,在C++17中,标准库也提供了std::string_view,操作和string类似,只是包括了一些只读的方法。
那么我们既然set了,我们肯定要get,我们先看看get的返回值:
通过返回值和备注,我们看到了它的返回值是OptionalString,如果key是不存在的,那么会返回的就是通过nullop构造的OptionalString对象。那么OptionalString是什么呢~
实际上,它的出现是因为为了更好的处理key不存在的这个情况,在我们学习命令行的时候,我们如果使用get查看一个不存在的key,返回值是nil,也就是空的意思,那么如果它的返回值是string,我们如何表达nil?
如果返回空串,我们并不排除key对应的value就是空串,如果我们再复杂一点,返回一个string*,指向的是空就代表nil,可是这样又会引发出内存安全的问题。
所以,Redis官方给出的操作是给了一个类型:OptionalString,主要是为了处理nil的情况。
但是作为C++学习者我们不能不知道boost在C++14的时候就已经引入了optional<std::string>的概念了,后来在C++17的时候我们直接就包含optional的头文件就行了。
我们先来看一段正确的使用:
void test_1(Redis& redis)
{redis.flushall();redis.set("key","111");auto value = redis.get("key");if(value)std::cout << value.value() << std::endl;else std::cout << "值不存在" << std::endl;}
我们一共发现了三处左右较为陌生的点,一个是我们使用auto来接收,一个是我们用if来判断value,一个是我们使用的value.value()打印。
首先,我们最能够理解的点是,<<运算符并不支持OptionalString的打印,所以我们需要通过value()方法来返回string类型,其实我们也能通过*value来解决,它们的返回值都是string,*是重载了解引用操作符,.value()就是显示的调用了对应的成员函数。
if(value)std::cout << *value << std::endl;else std::cout << "值不存在" << std::endl;
其次,我们还能理解的是,如果我们get的是一个不存在的键值,那么OptionalString返回值就是类似于nil的结果,所以我们最好是做一个类型检查。
最后,我们使用auto来接收,其实我们使用optional<string>接收也不是不行,但是为了方便嘛,我们可以直接使用auto接收。不过就需要你包含对应的头文件了。
对应value()方法有一个特点就是如果key不存在,就会抛异常,像这样
从上面这个代码的例子,我们认识了OptionalString,stringView。
那么为了测试方便,我们最好在对Redis进行操作的时候flushall一下,以下是第一个测试的代码:
void test_1(Redis &redis)
{redis.flushall();redis.set("key", "111");auto value = redis.get("key");// std::optional<std::string> value = redis.get("key");// if(value)// std::cout << *value << std::endl;// else// std::cout << "值不存在" << std::endl;std::cout << value.value() << std::endl;
}
int main()
{Redis redis("tcp://127.0.0.1:6379");test_1(redis);return 0;
}
expire:
然后我们来测试以下超时时间,在set的构造函数中,我们直接加就可以了:
void test_2(Redis &redis)
{redis.flushall();redis.set("key","111",std::chrono::seconds(10));using namespace std::chrono_literals;redis.set("key1","222",10s);std::this_thread::sleep_for(3s);long long time = redis.ttl("key");std::cout << "剩余时间为:" << time << std::endl;}
这里的代码就比较简单了,第一个点是设置过期时间有两种方式,一种是使用命令空间chrono的seconds函数或者millonseconds函数,第二种方式是我们引入命名空间chrono_literals,这样我们就可以直接使用字面值常量了。
然后我们就正常根据ttl的返回值,来接收以下time就可以了:
至于为什么使用chrono等,因为C++不像py可以直接传10表示时间,C++没有内置时间单位,所以需要一个库专门用来表示时间的,就像上面的两个。
NX XX:
接着我们来测试NX和XX:
一般默认的是ALWAYS,XX对应的是EXIST,NX对应的是NOT_EXIST:
void test_3(Redis &redis)
{redis.flushall();redis.set("key", "111", 0s,sw::redis::UpdateType::NOT_EXIST);auto value = redis.get("key");if(value)std::cout << value.value() << std::endl;else std::cout << "not exist"<< std::endl;
}
mset,mget:
对于mset和mget来说就是今天的难点了算是,当然仅仅相对而言,它不过是需要我们引入迭代器的概念而已。
由于传键值对的时候,get和mget的键值对都是pair类型的,所以我们使用mget的时候,官方给我们提供了两个角度,一个是使用initailizer_list,一个是使用容器的迭代器。
void test_4(Redis &redis)
{redis.flushall();// redis.mset({"key1","111","key2","222"}); // errorredis.mset({std::make_pair("key","111"),std::make_pair("key1","222")});std::vector<std::pair<std::string, std::string>> vec{std::make_pair("key2","222"),std::make_pair("key3","333")};std::vector<std::pair<std::string, std::string>> vec2{{"key4","444"},{"key5","555"}};redis.mset(vec.begin(), vec.end());redis.mset(vec2.begin(), vec2.end());std::vector<std::string> result;auto iter = std::back_inserter(result); redis.mget({"key","key2","key4"},iter);for(auto ele:result){std::cout << ele << ' ';}std::cout << std::endl;
}
对于mset和mget来说,较为特殊,使用mset的时候,我们有两种方式,一种,我们可以直接使用initailizer_list初始化,就像构建key 和 key1的时候,我们也可以通过重载迭代器的方式,即我们先定义一个容器,可以是list可以是set可以是Vector,构造好了之后,mset直接传入两个的迭代器的就可以了。
然后是mget,使用mget的时候,我们可以看看参数:
它的第二个参数是back_insert_iterator,其实就是尾插迭代器,在STL中,迭代器分为了五种类型,分别是输入迭代器,输出迭代器,前向迭代器,双向迭代器和随机访问迭代器,其中对于back_inserter来说,它就是输出迭代器的一种,mget获取到value之后,就把输出给到这个迭代器对应的容器里面。
那么给的方式,就是看位置了,比如back_inserter对应的位置是尾,那么就相当于给这个容器一直尾插。
它们对应了不同的迭代器,比如back_insert_iterator,insert_iterator,但是我们一般不会直接构造出这几个对象,我们一般会走一些辅助的函数来构造,比如back_inserter。
getrange setrange:
这两个我们如果有了C++string函数的理解,那就非常简单了,无非是我们要确定位置,给个偏移量,然后给上对应的字符串就可以了。
void test_5(Redis &redis)
{redis.flushall();redis.set("key","abcdefghijk");redis.setrange("key",2,"11111111");std::string result = redis.getrange("key",2,-1);std::cout << result << std::endl;
}
incr decr
同理,非常简单,我们直接给代码:
void test_6(Redis &redis)
{redis.flushall();redis.set("key", "20");redis.incr("key");auto value = redis.get("key");if (value)std::cout << value.value() << std::endl;redis.decr("key");value = redis.get("key");if (value)std::cout << value.value() << std::endl;
}
也是非常简单了。
其实文本篇幅较多仅是因为第一次使用Redis对应的API,那么在之后介绍list和hash的时候节奏就会快了。
本文的难点是在mset和mget的时候,如何正确使用迭代器的问题,其他难度相对来说是比较低的。
感谢阅读!
相关文章:
初识Redis · C++客户端string
目录 前言: string的API使用 set get: expire: NX XX: mset,mget: getrange setrange: incr decr 前言: 在前文,我们已经学习了Redis的定制化客户端怎么来的,以及如何配置好Redis定制化客户端&…...
React 事件处理基础
React 中最常见的两个需求,一个是列表渲染,另一个就是绑定点击事件。 这一篇就是从最基础的按钮点击开始,分四个阶段,逐步理解 React 中事件的写法和参数传递方式。 📍阶段一:最简单的点击事件 function A…...
插入排序和希尔排序
今天给小伙伴们分享两个比较基础的排序算法,插入排序和希尔排序,这两个排序算法之间联系还是挺多的,所以放在一起。希尔排序可以看作是插入排序的升级版,在面对一些更为复杂的场景时,希尔排序的效率往往要比插入排序高…...
Model Context Protocol (MCP) 开放协议对医疗多模态数据整合的分析路径【附代码】
Model Context Protocol (MCP) 作为一种革命性的开放协议,正在重塑医疗领域多模态数据整合的方式。本文将深入分析MCP协议在医疗多模态数据整合中的具体路径、技术实现、应用场景及未来发展方向,揭示这一协议如何成为连接AI与医疗数据的关键桥梁。 MCP协议概述及其在医疗多模…...
Oracle 11g通过dg4odbc配置dblink连接PostgreSQL
1、安装unixodbc 2、安装postgresql yum install -y postgresql17-odbc 3、配置postgresqlodbc数据源 vim /usr/local/etc/odbcinst.ini##添加如下 [mypg] Driver /usr/lib64/psqlodbcw.so Servername localhost Port 5432 Database postgres Username postgres Pas…...
docker 安装prometheus普罗米修斯
prometheus(普罗米修斯):天生为采集存储监控数据而生的时序数据库。prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示 grafana:一个监控仪表系统。grafana的数据来源可以有…...
Ubuntu上安装Mysql
步骤 1:安装 MySQL Server sudo apt update sudo apt install mysql-server -y这将安装最新版本的 MySQL 8.0 以及所有依赖组件。 步骤 2:检查安装是否成功 mysql --version sudo systemctl status mysql如果状态是 active (running),说明成…...
Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程
🌱 Spring Boot启动流程深度解析:从main()到应用就绪的完整旅程 #SpringBoot核心 #启动原理 #自动配置 #源码解析 一、启动流程图解 (1) 启动类执行 → (2) SpringApplication初始化 → (3) 事件驱动模型启动 ↓ …...
2025TGCTF Web WP复现
AAA 偷渡阴平 <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hint:你可以对着键盘…...
交叉注意力层的实质作用:连接编码器和解码器
交叉注意力层的实质作用 在Transformer架构里,交叉注意力层主要作用是连接编码器和解码器,让解码器能够利用编码器输出的上下文信息 。具体来说: 聚焦相关信息:以机器翻译任务为例,在将源语言句子翻译成目标语言时,交叉注意力能使解码器生成的每个词,都聚焦于源语言序列…...
conversation_template | conversation_actors | conversation_line_template
目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id:某段谈话的唯一编号FirstLineId:谈话开始的第一段话的编号,取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...
C++ `shared_ptr` 多线程使用
C shared_ptr 多线程使用 一、核心结论 引用计数:shared_ptr 的引用计数操作是原子的,线程安全控制块修改:修改 shared_ptr 指向的对象需要同步被管理对象:若对象本身非线程安全,访问时仍需加锁 二、分场景详解 场景…...
十天借助 Trae 实现 “幸运塔塔屋” 小程序时光记忆功能之旅
在软件开发的广阔天地中,创新与效率始终是开发者们不懈追求的目标。近期,我成功完成了一次极具挑战性与创新性的实践 —— 仅用十天时间,借助 Trae 这款强大的 AI 工具,开发出了 “幸运塔塔屋” 小程序,其中的 “时光记…...
WiFi“管家”------hostapd的工作流程
目录 1. 启动与初始化 1.1 解析命令行参数 1.2 读取配置文件 1.3 创建接口和 BSS 数据结构 1.4 初始化驱动程序 2. 认证和关联处理 2.1 监听认证请求 2.2 处理认证请求 2.3 处理关联请求 3. 数据转发 3.1 接收客户端数据 3.2 转发数据 4. 断开连接处理 4.1 处理客…...
计算机视觉——基于使用 OpenCV 与 Python 实现相机标定畸变校正
概述 相机标定是一种旨在通过确定相机的内参(焦距、光学中心、畸变系数)和外参(相机的位置和方向),提高图像在现实世界中的几何精度的过程。该过程可以纠正相机拍摄的图像中的畸变,使相机能够准确感知现实…...
OOM 未触发 JVM 崩溃的可能原因
1. OOM 未触发 JVM 崩溃的可能原因 (1) 未配置 JVM 参数强制崩溃 关键参数缺失: 若未添加 -XX:CrashOnOutOfMemoryError,JVM 在 OOM 时可能仅抛出异常并正常退出,而非崩溃,因此不会生成 hs_err_pid.log。 # 正确配置示例&…...
计算机视觉cv2入门之车牌号码识别
前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步:图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …...
xml+html 概述
1.什么是xml xml 是可扩展标记语言的缩写: Extensible Markup Language。 <root><h1> text 1</h1> </root> web 应用开发,需要配置 web.xml,就是个典型的 xml文件 <web-app><servlet><servlet-name&…...
C++数据结构与二叉树详解
前言: 在C编程的世界里,数据结构是构建高效程序的基石,而二叉树则是其中最优雅且应用广泛的数据结构之一。本文将带你深入理解二叉树的本质、实现与应用,助你在算法设计中游刃有余。 一、二叉树的基本概念 1. 什么是二叉树 二叉树…...
解决6栈6层码头集装箱堆栈翻箱最优解问题
‘’’ con 1 origin_stack = [ [4, 4, 1, 0, 0, 0], # 第一栈 [4, 3, 2, 1, 0, 0], # 第二栈 [4, 2, 2, 1, 0, 0], # 第三栈 [3, 3, 3, 1, 0, 0], # 第四栈 [3, 4, 2, 1, 0, 0], # 第五栈 [4, 2, 3, 2, 0, 0] # 第六栈 ] con 2 origin_stack = [ [4, 4, 3, 0, 0, 0], # 第一栈…...
Java 序列化与反序列化终极解析
Java 序列化与反序列化终极解析 1. 核心概念 (1) 什么是序列化? 定义:将对象转换为字节流的过程(对象 → 字节) 目的: 持久化存储(如保存到文件) 网络传输(如RPC调用)…...
YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图
文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本(YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12)网络结构图的绘制方法及图。本文所展…...
leetcode0145. 二叉树的后序遍历-easy
1 题目:二叉树的后序遍历 官方标定难度:易 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 解释: 示例 2: 输入…...
【Leetcode 每日一题】2364. 统计坏数对的数目
问题背景 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums。如果 i < j i < j i<j 且 j − i ≠ n u m s [ j ] − n u m s [ i ] j - i \ne nums[j] - nums[i] j−inums[j]−nums[i],那么我们称 ( i , j ) (i, j) (i,j) 是一个 坏数对 。…...
完整的 .NET 6 分布式定时任务实现(Hangfire + Redis 分布式锁)
完整的 .NET 6 分布式定时任务实现(Hangfire Redis 分布式锁) 以下是完整的解决方案,包含所有必要组件: 1. 基础设施层 1.1 分布式锁服务 // IDistributedLockService.cs public interface IDistributedLockService {ValueTa…...
人脸识别联合行为检测的办公管理新模式
基于人脸识别与行为检测的办公智能化解决方案 一、背景 在传统办公场景中,员工考勤管理、工位使用情况统计、安全监控等环节存在诸多痛点。例如,传统考勤方式如指纹打卡、刷卡等存在代打卡现象,考勤数据不准确;对于员工是否在工…...
鸿蒙NEXT开发键盘工具类(ArkTs)
export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 键盘工具类* author 鸿蒙布道师* since 2025/04/18*/ export class…...
Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇
目录 引言 一、获取节点信息 1.1 获取属性 1.2 获取文本值 1.3 获取ID、位置、标签名、大小 二、切换Frame 三、延时等待 3.1 隐式等待 3.2 显式等待 四、前进后退 五、Cookies 六、选项卡管理 七、异常处理 引言 这一节我们继续讲解Selenium的使用下篇࿰…...
【数据结构】第四弹——LinkedList与链表
文章目录 一. ArrayList 的缺陷二.链表2.1 链表的概念及结构2.2 链表的结构2.2.1 单向或者双向2.2.2 带头或者不带头2.2.3 循环非循环 2.3 链表的实现1. IList接口2. MySingleList 类中具体实现(不带头单向非循环链表)1. 节点抽象成内部类手搓一个链表2. 头插法3. 尾插法4. 指定…...
设计模式从入门到精通之(五)观察者模式
观察者模式:实现高效事件通知的秘诀 在日常生活中,我们经常需要同步通知多方的信息变更。比如天气预报系统、股票价格波动提醒、社交媒体的点赞通知等。这些场景中,通知机制需要高效、灵活,而不会因为通知方的变化影响系统整体。 …...
chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读
加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函数直接用emscripten::function,如: emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…...
使用人工智能大模型kimi,如何免费制作PPT?
使用人工智能大模型kimi,如何免费制作PPT? 手把手操作视频https://edu.csdn.net/learn/40406/666573...
ModbusTCP 转 Profinet 主站网关
一、 功能概述 1.1 设备简介 本产品是 ModbusTCP 和 Profinet(M) 网关(以下简称网关),使用数据映射 方式工作。 本产品在 ModbusTCP 侧作为 ModbusTCP 从站,接 PLC 、上位机、 wincc 屏 等;在 Profin…...
进阶篇|CAN FD 与性能优化
引言 1. CAN vs. CAN FD 对比 2. CAN FD 帧结构详解...
6.6 “3步调用ChatGPT打造高可靠Python调度器,零依赖实现定时任务自动化“
3步调用ChatGPT打造高可靠Python调度器,零依赖实现定时任务自动化 关键词:ChatGPT代码生成、Python调度器设计、定时任务自动化、异常处理机制、日志监控系统 需求分析与技术选型 GitHub Sentinel 需要实现两种定时任务模式: #mermaid-svg-prOScv2NNhn6w90N {font-family:…...
HarmonyOS 基础语法概述 UI范式
ArkUI框架 - UI范式 ArkTS的基本组成 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中Entry、Component和State都是装饰器,Component表示自定义组件,Entry表示该自定义组件为入口组件,Stat…...
23种设计模式-创建型模式之建造者模式(Java版本)
Java 建造者模式(Builder Pattern)详解 🧱 什么是建造者模式? 建造者模式用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 适用于创建过程复杂、构造顺序稳定但组件变化的对象。…...
【AI提示词】退休规划顾问专家
提示说明 随着人口老龄化的加剧,越来越多的人开始关注退休规划问题。一个专业的退休规划顾问可以帮助用户合理规划退休生活,确保退休后的生活质量。 提示词 # 角色 退休规划顾问专家## 注意 1. 专家设计应符合退休规划的专业性和可靠性,帮…...
文献总结:NIPS2023——车路协同自动驾驶感知中的时间对齐(FFNet)
FFNet 一、文献基本信息二、背景介绍三、相关研究1. 以自车为中心的3D目标检测2. 车路协同3D目标检测3. 特征流 四、FFNet网络架构1. 车路协同3D目标检测任务定义2. 特征流网络2.1 特征流生成2.2 压缩、传输与解压缩2.3 车辆传感器数据与基础设施特征流融合 3. 特征流网络训练流…...
(二十六)Java观察者模式在Android开发中的应用详解
Java观察者模式在Android开发中的应用 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听一个主题对象。当主题对象的状态发生变化时,所有注册的观察者…...
goland做验证码识别时报“undefined: gosseract.NewClient”
gosseract 应该有 和 c 相关的配置库因此需要安装 cgo 并且启用 CGO_ENABLED 在cmd下面输入这个 go env -w CGO_ENABLED1 接着输入 go env 验证是否设置成功 解决了这个问题后 “undefined: gosseract.NewClient” 又出现了 # runtime/cgo …...
ceph weight 和 reweight 的区别
ceph osd df ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS0 nvme 6.98630 0.95508 7.0 TiB 5.0 TiB 4.9 TiB 13 GiB 33 GiB 2.0 TiB 71.10 0.96 83 up1 nvme 6.98630...
# 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类
使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类 在深度学习领域,卷积神经网络(CNN)是处理图像分类任务的强大工具。本文将通过一个简单的示例,展示如何使用 PyTorch 构建、训练和测试一个 CNN 模型,用于对食…...
Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战
知识点1【TFTP的概述】 学习通信的基本:通信协议(具体发送上面样的报文)、通信流程(按照什么步骤发送) 1、TFTP的概述 tftp:简单文件传输协议,**基于UDP,**不进行用户有效性验证 …...
汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作
故障现象 一辆2019款大众途观L车,搭载DKV发动机和0DE双离合变速器,累计行驶里程约为8万km。车主进厂反映,鼓风机偶尔不工作。 故障诊断 接车后试车,鼓风机各挡位均工作正常。用故障检测仪检测,空调控制单元&#x…...
编程常见错误归类
上一篇讲了调试,今天通过一个举例回忆一下上一篇内容吧! 1. 回顾:调试举例 在VS2022、X86、Debug的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥? #include <stdio.h> int main() {int …...
Python 3.13 support for PyTorch
Python 3.13 support for PyTorch Python 3.13 support for PyTorch 去官网可以查到具体信息:https://pytorch.org/get-started/locally/ 然后选择自己的CUDA版本,下面会显示下载网站,比如我选择12.4,则会出现:pip3 …...
中国联通:《DeepSeek洞察与大模型应用:人工智能技术发展与应用实践》(可下载)
近年来,人工智能(AI)技术迅猛发展,尤其是大模型技术的崛起,正在深刻改变各行各业的运营模式和创新路径。作为中国通信行业的领军企业之一,中国联通积极拥抱AI技术变革,结合自身在通信网络、大数…...
k8s 调整Node节点 Max_Pods
默认情况下,Kubernetes集群中一个Node最多能起110个Pod。 这是基于性能和资源管理的考虑,以确保Kubernetes集群的稳定性和可靠性。 查看kht125节点上支持的最大pod数量: kubectl describe node kht125 | grep -i “Capacity|Allocatable” -A 6 调整…...
VR拍摄要点与技巧有哪些?有哪些最佳实践?
VR拍摄要点与技巧:最佳实践 VR技术通过模拟环境,使用户能够沉浸在一个完全由计算机生成的虚拟世界中,进行互动体验。在VR拍摄领域,我们主要利用这一技术来创建360度全景视频或图片,让观众能够全方位、无死角地感受拍摄…...