Redis使用基础
1 redis介绍
Redis(Remote Dictionary Server ),即远程字典服务 ! 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!
1.1 redis优势 memcache
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
1.2 应用场景
redis的应用越来越多,已经不单单只是为了解决高速缓存的问题。redis官方更是推出了 Redis Stack 模块,帮助企业更加快速的构建一些复杂的开发场景。
关于它当下比较流行的十大场景,可以看一下这篇文章:(https://blog.csdn.net/m0_51358164/article/details/125927452)
2 安装redis
虽然redis现在已经支持在windows上进行安装了,但是在实际的开发应用中还是在Linux系统中安装使用。
鉴于我们之前已经学习过Linux系统的基本操作,因此我们这里直接安装到Linux系统中【依然是VM虚拟机】。
具体的安装过程,参考Linux开发环境部署讲义
3 redis基础
3.1 数据库说明
redis默认有16个数据库,这些数据库分别用【0-15】的索引值来表示。并且redis是没有表的概念的,你可以把它的每个数据库,看成一张表。
# 切换数据库,2代表数据库索引
select 2
在配置文件中有说明,你也可以修改它,改完记得重启服务。
3.2 连接命令
redis 客户端(redis-cli)在连接redis数据库时执行的命令。
# 查看命令帮助
redis-cli --help
# 语法结构为
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]-h <hostname> 服务器主机名,默认为 127.0.0.1-p <port> 服务器端口,默认为 6379-s <socket> 服务器套接字,覆盖主机名和端口-a <password> 连接到服务器时要使用的密码。你也可以使用 REDISCLI_AUTH 环境变量来更安全地传递这个密码(如果两者都使用,这个参数会优先使用)-u <uri> 服务器URI-r <repeat> 执行指定的命令 N 次-i <interval> 当使用 -r 时,每个命令等待 <interval> 秒。可以指定亚秒时间,如 -i 0.1-n <db> 数据库编号-x 从 STDIN(标准输入)读取最后一个参数。-d <delimiter> 用于原始格式的多块分隔符 (默认: \n)-c 启用集群模式(遵循 -ASK 和 -MOVED 的重定向)--raw 对回复使用原始格式 (当 STDOUT 不是 tty 时默认)--no-raw 强制格式化输出,即使 STDOUT 不是 tty--csv CSV格式输出--stat 打印关于服务器的滚动统计信息: mem, clients,...--latency 进入特殊模式连续采样延时。如果你在交互会话中使用这种模式,它会一直运行,显示实时数据。否则,如果指定了——raw或——csv,或者将输出重定向到非 TTY,它对1秒的延迟进行采样 (您可以使用 -i 来更改间隔),然后产生一个输出并退出。--latency-history 比如延迟,但是跟踪延迟会随着时间变化。默认时间间隔为15秒,请使用-i修改。--latency-dist 将延迟显示为光谱,需要xterm 256 色。默认时间间隔为1秒,请使用-i修改。--lru-test <keys> 用 80-20 分布模拟缓存工作负载。--replica 模拟一个副本,显示从主机接收到的命令。--rdb <filename> 从远程服务器传输 RDB 转储到本地文件。--pipe 从stdin向服务器传输原始Redis协议。--pipe-timeout <n> 在 --pipe 模式下,在发送完所有数据后,如果 <n> 秒内未收到回复,则错误终止。默认超时时间为: 30。用 0 表示永远等待。--bigkeys Redis 键的样本,寻找有许多元素的键(复杂性)--memkeys Redis 键的样本,查找占用大量内存的键--memkeys-samples <n> Redis 键的样本,查找占用大量内存的密钥,并允许定义要采样的关键元素的数量--hotkeys 寻找热键的 Redis 键样本,仅在 maxmemory-policy 为 *lfu 时有效。--scan 使用 SCAN 命令列出所有键--pattern <pat> 与 --scan 一起使用,可以指定一个 SCAN 模式--intrinsic-latency <sec> 运行一个测试来测量内在的系统延迟,测试将运行指定的秒数。--eval <file> 使用 Lua 脚本在 <file> 发送 EVAL 命令。--ldb 与 --eval 一起使用,启用 Redis Lua 调试器。--ldb-sync-mode 与 --ldb 类似,但使用同步 Lua 调试器,在这种模式下,服务器被阻塞,脚本更改不会从服务器内存回滚。--cluster <command> [args...] [opts...] 集群管理器命令和参数 (参见下面)--verbose 详细模式--no-auth-warning 在命令行界面上使用密码时不显示警告信息--help 输出这个帮助并退出--version 输出版本并退出
操作示例:
# 打开本地默认的redis服务 127.0.0.1:6379
redis-cli# 根据端口号打开本地的redis服务
redis-cli -p port# 根据端口号和密码打开本地redis
redis-cli -p port -a password# 根据IP地址、端口号、密码、打开远程redis
redis-cli -h host -p port -a password# 最后接shutdown可关闭redis服务,或在连接工具中使用shutdown也可关闭redis
redis-cli -h IP地址 -p 端口号 -a 密码 shutdown# redis-cli连接工具关闭服务
127.0.0.1:6379> shutdown # 直接关闭服务
127.0.0.1:6379> shutdown nosave # 直接关闭服务,不保存所有数据
127.0.0.1:6379> shutdown save # 关闭服务,并保存所有数据
3.3 key命令
Redis 键命令用于管理 redis 的键,Redis 键命令的基本语法如下:
命令符 keyName [数值]
127.0.0.1:6379> set mykey hello,world!
OK
127.0.0.1:6379> get mykey
"hello,world!"
127.0.0.1:6379> del mykey
(integer) 1
上面实例演示使用 set 命令向 Redis 添加一个 KEY,通过 get 命令获取 KEY 的数据,最后使用 del 命令删除 KEY。如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
常用的用来操作key的命令
命令 | 返回内容 | 说明 |
---|---|---|
set name jack | ok提示 | 添加一个key为name,value为jack的键值对。如果key已存在,内容替换 |
get name | value值 | 查看key为name的value值 |
dump name | 序列化值 | 序列化给定 key,并返回被序列化的值 |
rename name username | ok提示 | 修改key的名字,name变为username |
del name | 整数(删除数量) | 删除指定key,可以后面跟 , 号写多个,同时删除多个 |
exists name | 整数 | 判断key为name是否存在,1为存在,0为不存在 |
move name 1 | 整数 | 移动key为name的数据到数据库1中,本库删除 |
ttl name | 整数(秒) | 查询key为name的数据有效时间 >0 有存活时间,且时间正在倒计时 -1 一直有效 -2 已失效 |
expire name 15 | 整数(影响数量) | 设置key为name的值,15秒后失效 |
expireat name 1677341411 | 整数(影响数量) | 设置到期时间戳,就是指定具体的年与日时分秒到期,网上有转换工具 |
persist name | 整数(影响数量) | 移出到期时间,变为-2的key不能通过该命令恢复活性,需要重新set |
randomkey | key名 | 从当前数据库中随机返回一个 key |
type name | 数据类型 | 获取改值的数据类型 |
keys * | 键名称 | 查找符合匹配规则的key名称,如果为空返回(empty array) *代表0到任意个,?代表一个 例如: keys *a* ,keys ?a? |
flushall | ok提示 | 清空所有库的内容,注意这个命令一定会成功 |
clear | 无返回内容 | 清空当前操作屏幕 |
3.4 键值设计规约
key命名风格
**【推荐】**Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名;
【强制】以英文字母开头,命名中只能出现小写字母、数字、英文点号(.)和英文半角冒号(😃;
【强制】不要包含特殊字符,如下划线、空格、换行、单双引号以及其他转义字符;
命名规范
【强制】命名规范:业务模块名:业务逻辑含义:其他:value类型
1 )业务模块名:具体的功能模块
2)逻辑含义段:
【强制】不同业务逻辑含义使用英文半角冒号(:)分割,
**【强制】**同一业务逻辑含义段的单词之间使用英文半角点号 (.)分割,用来表示一个完整的语义
3)value类型:
**【强制】**Redis key命名以key所代表的value类型结尾,以提高可读性;
示例:user:basic.info:{userid}:string
value 设计
【强制】:拒绝bigkey(防止网卡流量、慢查询)。
String类型控制在10KB以内,Hash、List、Set、ZSet元素个数不要超过5000。
更多学习,点击这里学习Redis支持的数据类型。
相关文章:
Redis使用基础
1 redis介绍 Redis(Remote Dictionary Server ),即远程字典服务 ! 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并…...
React和Vue有什么区别,如何选择?
React和Vue有什么区别,如何选择? React 和 Vue 是当前最受欢迎的前端框架之一,两者在开发者中都有极高的声誉。它们都旨在帮助开发人员构建用户界面,但在实现方式和适用场景上有所不同。如果你正考虑在项目中选择 React 或 Vue&a…...
C++|开源日志库log4cpp和glog
文章目录 log4cpp 和 glog对比1. **功能对比**2. **易用性和配置**3. **性能**4. **线程安全**5. **日志输出**6. **功能扩展**7. **适用场景**8. **总结** 其它开源C日志库1. **spdlog**2. **easylogging**3. **Boost.Log**4. **loguru**5. **Poco Logging**6. **Qt Logging (…...
安卓程序作为web服务端的技术实现(三):AndServer作为服务
安卓程序作为web服务端的技术实现:AndServer 实现登录权限拦截-CSDN博客 安卓程序作为web服务端的技术实现(二):Room 实现数据存储-CSDN博客 经过两次捣鼓 AndServer已经能正常访问了 但是发现一个问题 就是当我app退出时 AndSe…...
数据结构(Java)——二叉树
1.概念 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树可以是空的(即没有节点),或者由一个根节点以及零个或多个左子树和右子树组成,其中左子树和右子树也分…...
深度学习系列76:流式tts的一个简单实现
1. 概述 使用queue,producer不断向queue中添加audio,然后consumer不断从queue中消费audio。 下面的样例使用melo来生成语音,需要先下载melo.tts。模型在https://myshell-public-repo-hosting.s3.amazonaws.com/openvoice/basespeakers/ZH/ch…...
数据结构(三) 排序/并查集/图
目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…...
WPA Supplicant 技术详解
目录 前言 1. 简介 2. 源码获取 3. 代码架构 3.1 模块结构 3.2. 主要文件和目录 3.3. 顶层模块 3.4 模块之间的关系 4. 工作流程简要描述 启动 加载配置 初始化 认证 数据传输 5. 编译与安装 5.1 编译 5.1.1 libnl库与openssl库准备 5.1.2 修改配置文件 5.…...
Avalonia UI MVVM DataTemplate里绑定Command
Avalonia 模板里面绑定ViewModel跟WPF写法有些不同。需要单独绑定Command. WPF里面可以直接按照下面的方法绑定DataContext. <Button Content"Button" Command"{Binding DataContext.ClickCommand, RelativeSource{RelativeSource AncestorType{x:Type User…...
macOS如何进入 Application Support 目录(cd: string not in pwd: Application)
错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…...
【探索 Kali Linux】渗透测试与网络安全的终极操作系统
探索 Kali Linux:渗透测试与网络安全的终极操作系统 在网络安全领域,Kali Linux 无疑是最受欢迎的操作系统之一。无论是专业的渗透测试人员、安全研究人员,还是对网络安全感兴趣的初学者,Kali Linux 都提供了强大的工具和灵活的环…...
《SwinIR:使用Swin-Transformer图像恢复》学习笔记
paper:2108.10257 GitHub:GitHub - JingyunLiang/SwinIR: SwinIR: 使用 Swin Transformer 进行图像修复 (官方仓库) 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…...
AR智慧点巡检系统探究和技术方案设计
一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…...
电路研究9.2——合宙Air780EP使用AT指令
这里正式研究AT指令的学习了,之前只是接触的AT指令,这里则是深入分析AT指令了。 软件的开发方式: AT:MCU 做主控,MCU 发 AT 命令给模组的开发方式,模组仅提供标准的 AT 固件, 所有的业务控制逻辑…...
OpenCV相机标定与3D重建(62)根据两个投影矩阵和对应的图像点来计算3D空间中点的坐标函数triangulatePoints()的使用
加粗样式- 操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 这个函数通过使用立体相机对3维点的观测,重建这些点的三维坐标(以齐次坐标表示)。 cv::triangula…...
基于ollama,langchain,springboot从零搭建知识库四【设计通用rag系统】
需求: 1:可以自定义管理大模型,可自行选择ollama,openai,千问等大模型 2:自定义向量数据库,支持pgvector,elasticsearch,milvus(这三个目前比较常用ÿ…...
【Go面试】工作经验篇 (持续整合)
这里写目录标题 什么是逃逸分析服务端怎么接受客户端上传的文件说一下对gin框架的理解gin有哪些常用中间件gin怎么用swagger写接口文档nginx一般是用来做什么如果调用方法经常超时怎么办gin中怎么和mysql通信从mysql调数据到redis,如何同步延时双删redis ,mysql都不存在用户请求…...
“腾讯、钉钉、飞书” 会议开源平替,免费功能强大
在数字化时代,远程办公和线上协作越来越火。然而,市面上的视频会议工具要么贵得离谱,要么功能受限,甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet,这可是我在网…...
怎样使用树莓派自己搭建一套ADS-B信号接收系统
0 我们知道,ADS-B全称广播式自动相关监视系统,其实就是飞机发出的广播信号,用明码来对外发送自己的位置、高度、速度、航向等信息,是公开信息。连续接收到一架飞机发出的ADS-B信息后,可以通过其坐标点来描绘出飞机的航…...
终极的复杂,是简单
软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …...
粒子群算法 笔记 数学建模
引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…...
Vue.js 嵌套路由和动态路由
Vue.js 嵌套路由和动态路由 在 Vue.js 开发中,Vue Router 是官方提供的路由管理器,用于构建单页应用(SPA)。它支持嵌套路由和动态路由,帮助开发者构建复杂的应用结构。 嵌套路由 嵌套路由允许在路由配置中定义子路由…...
Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...
C# OpenCV机器视觉:红外体温检测
在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…...
STM32项目分享:智能厨房安全检测系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能厨房安全检测系统 (资料分…...
docker 安装 redis 详解
在平常的开发工作中,我们经常会用到 redis,那么 docker 下应该如何安装 redis 呢?简单来说:第一步:拉取redis镜像;第二步:设置 redis.conf 配置文件;第三步:编写 docker-…...
《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
在元宇宙的宏大愿景中,高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合,为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...
nginx分发请求超时切换服务
nginx的upstream模块实现超时自动切换服务 upstream testfail {server 192.168.1.218 max_fails1 fail_timeout10s;server 192.168.1.129 max_fails1 fail_timeout10s;} max_fails代表失败尝试次数,达到设置的次数则视为该服务不可用, fail_timeout代…...
vulfocus/fastjson-cnvd_2017_02833复现
漏洞概述 Fastjson 是阿里巴巴开发的一个高性能的 Java 库,用于将 Java 对象转换成 JSON 格式(序列化),以及将 JSON 字符串转换回 Java 对象(反序列化)。 fastjson在解析json的过程中,支持使用type字段来指…...
.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
OpenCV imread函数读取图像__实例详解
OpenCV imread函数读取图像__实例详解 本文目录: 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 (3.1)、Flags-1时,样返回加载的图像(使用alpha通道,否…...
GPSd定时检测保活TCP GPS源
为了在 TCP GPS 源丢失连接时自动重新连接,可以编写一个监控脚本,定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失,则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具,本例需要使用 gpspi…...
得物App亮相第七届进博会,科技赋能打造消费新热点
在2024年11月5日至11月10日举办的第七届进博会舞台上,上海交易团虹口分团表现亮眼,其中得物作为来自虹口品质电商的践行者,备受众多参观者关注。 上海得物信息集团有限公司自2015年于上海虹口创立以来,始终坚守“满足年轻人对美好…...
单片机内存管理剖析
一、概述 在单片机系统中,内存资源通常是有限的,因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性,避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器(如 Flash)和数据存储器&a…...
用Python绘制一只懒羊羊
目录 一、准备工作 二、Turtle库简介 三、绘制懒羊羊的步骤 1. 导入Turtle库并设置画布 2. 绘制头部 3. 绘制眼睛 4. 绘制嘴巴 5. 绘制身体 6. 绘制四肢 7. 完成绘制 五、运行代码与结果展示 六、总结 在这个趣味盎然的技术实践中,我们将使用Python和Turtle图形…...
Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...
神经网络梯度爆炸的原因及解决方案
在深度学习中,梯度爆炸(gradient exploding)是一种常见的训练问题,尤其是在深层神经网络中。梯度爆炸指的是在反向传播过程中,梯度值呈指数级增长,导致网络权重的大幅更新,从而使得网络变得不稳…...
WPS不登录无法使用基本功能的解决方案
前言 WPS不登录无法使用基本功能的原因通常是为了同步数据、提供更多高级功能或满足软件授权要求。然而,一些用户可能出于隐私或便捷性的考虑,不愿意登录账号。在这种情况下,WPS可能会限制未登录用户的使用权限,导致工具栏变灰…...
蓝桥杯lesson3---string的使用
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string的概念 string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用&…...
Java设计模式 三 工厂方法模式 (Factory Method Pattern)
工厂方法模式 (Factory Method Pattern) 是一种常见的创建型设计模式,旨在通过定义一个接口来创建对象,而将实例化对象的具体类延迟到子类中。工厂方法模式允许客户端通过工厂方法来创建对象,而不需要直接调用构造函数,这样可以减…...
日志收集Day005
1.filebeat的input类型之filestream实战案例: 在7.16版本中已经弃用log类型,之后需要使用filebeat,与log不同,filebeat的message无需设置就是顶级字段 1.1简单使用: filebeat.inputs: - type: filestreamenabled: truepaths:- /tmp/myfilestream01.lo…...
java开发,IDEA转战VSCODE配置(mac)
一、基本java开发环境配置 前提:已经安装了jdk、maven、vscode,且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置,也可以在setting.json文件中直接编辑&…...
Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)
一、主要观点: 在某些情况下,使用 non-member、non-friend 函数来替换 member 函数可以增强封装性和可扩展性,提供更好的软件设计。 二、详细解释: 封装性: 类成员函数的封装性考量:成员函数可以访问类的…...
(3)STM32 USB设备开发-USB存储设备
例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用芯片内部flash作为USB存储设备的例程,没有知识,全是实操,按照步骤就能获得一个STM32的U盘。本例子是在野火F103MINI开发板上验证的,如果代码…...
考研408笔记之数据结构(五)——图
数据结构(五)——图 1. 图的基本概念 1.1 图的定义 1.2 有向图和无向图 在有向图中,使用圆括号表示一条边,圆括号里元素位置互换没有影响。 在无向图中,使用尖括号表示一条边,尖括号里元素位置互换则表示…...
【博客之星】年度总结:在云影与墨香中探寻成长的足迹
🐇明明跟你说过:个人主页 🔖行路有良友,便是天堂🔖 目录 一、年度回顾 1、创作历程 2、个人成长 3、个人生活与博客事业 二、技术总结 1、赛道选择 2、技术工具 3、实战项目 三、前景与展望 1、云原生未来…...
springboot 调用 c++生成的so库文件
一、创建c文件 SoTest.h #pragma once class SoTest {int Add(int a,int b); };SoTest.cpp #include "SoTest.h"int SoTest::Add(int a, int b) {return a b; }二、创建so文件 /home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so 三、java代码 Maven依…...
简识JVM栈帧中的操作数栈
在JVM(Java虚拟机)中,栈帧(Stack Frame)是方法执行时的数据结构,用于存储局部变量、操作数栈、方法返回地址等信息。 其中,操作数栈(Operand Stack)是栈帧中的一个重要组…...
在 Kubernetes 上快速安装 KubeSphere v4.1.2
目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...
腾讯 Hunyuan3D-2: 高分辨率3D 资产生成
腾讯 Hunyuan3D-2:高分辨率 3D 资产生成的突破 前言 在当今数字化时代,3D 资产生成技术正变得越来越重要。无论是游戏开发、影视制作还是虚拟现实领域,高质量的 3D 模型和纹理都是创造沉浸式体验的关键。然而,传统的 3D 资产制作…...