Redis ⑥-string | hash | list
string类型基本介绍
Redis 中的字符串,是直接按照二进制的方式进行存储的。也就是说,在存取的过程中,是不会做任何编码转换的。存的是啥,取的时候就是啥。
Redis 的这个机制,就使得 Redis 非常适合用来存储各种各样的二进制数据,比如JSON、XML、图片、视频、音频、压缩包等等。
虽然可以存储视频、音频等,但还是不建议,因为这些文件大小往往都不小,容易造成阻塞。
FLUSHALL
FLUSHALL
FLUSHALL
命令用于清空 Redis 数据库中的所有键值对。- 该命令谨慎使用为好。
string类型常用命令
SET
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
SET
命令用于设置键值对。key
是要设置的键名,value
是要设置的键值。EX seconds
:设置键的过期时间为 seconds 秒。PX milliseconds
:设置键的过期时间为 milliseconds 毫秒。NX
:只在键不存在时,才对键进行设置操作。如果键存在,则不设置,返回 nilXX
:只在键存在时,才对键进行设置操作。如果键不存在,则不设置,返回 nil
GET
GET key
GET
命令用于获取键值对的值。GET
命令只作用于该键对应的值为字符串类型,如果不为字符串类型,使用GET
命令则会报错:
WRONGTYPE Operation against a key holding the wrong kind of value
MSET
MSET key value [key value...]
MSET
命令用于一次性设置多个键值对。- 所有键值对之间用空格分隔。
- 时间复杂度为 O(N),这里 N 为要设置的键值对的数量。
MGET
MGET key [key...]
MGET
命令用于一次性获取多个键值对的值。- 所有键之间用空格分隔。
- 时间复杂度为 O(N),这里 N 为要获取的键的数量。
SETNX
SETNX key value
- 此处的 NX 就是上方 SET 命令中的 NX。
SETXX
SETXX key value
- 此处的 XX 就是上方 SET 命令中的 XX。
SETEX
SETEX key seconds value
SETEX
命令用于设置键值对,并设置键的过期时间为 seconds 秒。- 等价于
SET key value EX seconds
PSETEX
PSETEX key milliseconds value
PSETEX
命令用于设置键值对,并设置键的过期时间为 milliseconds 毫秒。- 等价于
SET key value PX milliseconds
INCR
INCR key
INCR
命令用于对键的值做加 1 操作。- 返回值为执行加 1 操作之后的结果。
- 执行该命令的键对应的值必须是 int 类型,否则会报错:
ERR value is not an integer or out of range
- 该整数为 64 位 (8 字节)的,相当于 C++ 的
long long
类型,Java 的long
类型。 - 如果对一个不存在的键执行了该命令,则会创建一个默认值为 0 的键,并对其进行加 1 操作。
DECR
DECR key
DECR
命令用于对键的值做减 1 操作。- 返回值为执行减 1 操作之后的结果。
- 其特性与
INCR
命令相同。
INCRBY
INCRBY key increment
INCRBY
命令用于对键的值做加法操作,加的值为 increment。- 返回值为执行加法操作之后的结果。
- 其特性与
INCR
命令相同。
DECRBY
DECRBY key decrement
DECRBY
命令用于对键的值做减法操作,减的值为 decrement。- 返回值为执行减法操作之后的结果。
- 其特性与
INCRBY
命令相同。
INCRBYFLOAT
INCRBYFLOAT key increment
INCRBYFLOAT
命令用于对键的值做浮点数的加法操作,加的值为 increment。- 返回值为执行浮点数加法操作之后的结果。
- Redis 中的浮点数的精度为小数点后 17 位。
- Redis 中的 string 类型并没有提供类似于 float、double 这样的浮点数类型。所以,其本质存的还是 embstr 或者 raw。
- 执行该命令时,其分为三个步骤:将取出来的字符串转换为浮点数,进行浮点数加法操作,再将结果转换为字符串存回去。
- 所以,该命令对性能有一定的影响,也不会,也不建议经常的使用。
上述操作的时间复杂度本质都还是 O(1)。由于 Redis 使用还是单线程模型,所以不用担心线程安全问题。
APPEND
APPEND key value
APPEND
命令用于在键对应的值的末尾追加字符串 value。- 返回值添加后的字符串的长度,该长度单位为字节。
- 如果改键存在,则执行追加操作。如果改键不存在,则先创建一个空值,再执行追加操作,相当于执行 SET 操作。
- 注意:
- 当我们将值设置为一个汉字时,其返回的结果的为 3,这是因为我们当前使用的终端的编码方式是 UTF-8,而汉字的编码长度为 3,故存储在 Redis 中的长度为 3。
- 如果我们直接获取该键的值,则会看到类似于
\xe4\xbd\xa0
的结果,这是三个字节的 16 进制编码。根据 UTF-8 码表,可以得到其结果为你
。 - 如果想直接看到汉字,我们可以在启动 Redis 客户端时,多添加一条命令
--raw
,也就是redis-cli --raw
。这样,我们获取该键的值时,Redis 客户端就会自动的对该二进制数据尝试进行翻译。
redis-cli --raw
GETRANGE
GETRANGE key start end
GETRANGE
命令用于获取键对应的值的某一个特定范围的子字符串。start
和end
是子字符串的起始和结束位置,都是 0 开始的偏移量。该获取区间为 左闭右闭。- 返回值为对应区间的子字符串。
- 注意:
start
和end
都可以为负数,表示从字符串的末尾开始计算偏移量。比如 -1 为最后一个字符,-2 为倒数第二个字符,以此类推。
SETRANGE
SETRANGE key offset value
SETRANGE
用于从 offset 位置开始,将键对应的值覆写为 value。- 如果 offset 比当前字符串长度还要长,则会在字符串末尾补上空格后再进行覆写。
- 返回值是设置成功之后,字符串的长度。
- 如果该键不存在,则先创建一个空行值(\x00),再执行覆写操作。
STRLEN
STRLEN key
STRLEN
命令用于获取键对应值的字符串长度。- 返回值为字符串的长度,单位为字节。
string编码方式
- Redis 字符串类型支持三种编码方式:
raw
、embstr
、int
。raw
:普通字符串,用于存储更长的字符串,底层是一个字节数组embstr
:压缩字符串,当键对应的值字节数偏小时(据说是39字节),使用 embstr 编码,节省内存。int
:64位/8字节 的整形,当存储的值为纯数字时,使用 int 编码。浮点数使用的编码还是 embstr。
string类型的使用场景
- 作为缓存:作为应用服务器和数据库服务器的中间件,用于存储热点数据,提高查询的效率。
- 计数:使用 Redis 作为基本的计数工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步处理或者落地到其他数据源。
- 存储 session 会话:对于使用了负载均衡的分布式系统,可以将 session 信息存储在 Redis 中,提高 session 共享的效率。
- 短信验证码:设置验证码的有效时间,设置一个用户在规定的时间内只能获取 N 次验证码,防止用户恶意获取验证码,造成服务器压力。
以上只是介绍了 Redis 中的 string 类型常见的使用场景,实际上还可以用在更多地方,具体需要根据业务需求进行选择。
hash类型基本介绍
`Redis 自身就是一个 hash类型,通过存储键值对,以达到 O(1) 的时间复杂度的快速访问。
这里的 hash类型,是 Redis 中 key-value 中的 value 的类型。也就是 value 是一个 hash 类型,可以存储键值对结构。
hash类型常用命令
HSET
HSET key field value [field value... ]
- 区分这里 key 和 field 的区别:
- key:Redis 自身存储的键,Redis 通过 key 可以访问到对应 value
- field:当 Redis 中的 value 是一个 hash 类型时,field 也是该 hash 的 key。
- 返回值为存储成功的键值对个数。
- 如果 field 已经存在,则会覆盖原有的值。不论设置了多少个已经存在的 field,尽管设置成功了,返回值都为 0。因为这些字段的设置操作没有引入新的字段,只是更新了已有字段的值。
HGET
HGET key field
- 返回指定 key 下的指定 field 的值。
HEXISTS
HEXISTS key field
- 判断指定 key 下的指定 field 是否存在。
- 返回 1 代表存在,0 代表不存在。
HDEL
HDEL key field [field...]
- 删除指定 key 下的指定 field。
- 返回值为删除成功的键值对个数。
HKEYS
HKEYS key
- 返回指定 key 下所有的 field 名称。
- 该命令和
keys *
一样,谨慎使用。
HVALS
HVALS key
- 返回指定 key 下所有的 field 值。
- 该命令和
keys *
一样,谨慎使用。
HGETALL
HGETALL key
- 返回指定 key 下所有的键值对。
- 该命令和
keys *
一样,谨慎使用。
HMGET
HMGET key field [field...]
- 返回指定 key 下的多个 field 值。
- 返回值的顺序和 field 参数的顺序一致。
HMSET
HMSET key field value [field value...]
- 批量设置多个 field 值。
- 返回值不代表实际存储成功的键值对个数。
- 该命令和 HSET 的作用一样,为了不那么反直觉,所以才有该命令。
HLEN
HLEN key
- 返回指定 key 下的 field 数量,也就是 hash 元素的个数。
HSETNX
HSETNX key field value
- 只有当 field 不存在时,才设置 field 值。如果存在则设置失败。
HINCRBY
HINCRBY key field increment
- 给指定 key 下的指定 field 值增加指定增量。
- 如果 field 不存在,则设置 field 值为 0 后再增加。
- 返回值是增加后的值。
- 这里不像 string 类型,有 DECRBY 命令,因为 hash 类型并不经常使用加减操作,而 HINCRBY 自身已经可以完成加减操作了
HINCRBYFLOAT
HINCRBYFLOAT key field increment
- 给指定 key 下的指定 field 值增加指定浮点数增量。
- 如果 field 不存在,则设置 field 值为 0 后再增加。
- 返回值是增加后的值。
HSTRLEN
HSTRLEN key field
- 返回指定 key 下的指定 field 值的字符串长度,单位为字节。
- 如果 field 不存在,则返回 0。
hash编码方式
- Redis 中的 hash 类型有两种编码方式:
- ziplist:是一种压缩链表,当 hash 类型中元素个数小于 hash-max-ziplist-entries 配置项 (默认为 512) 的值 或者 元素值总长度小于 hash-max-ziplist-value 配置项 (默认为 64) 的值时,Redis 使用 ziplist 编码。(在 Redis 4.0 版本后,ziplist 已被 listpack 替代)
- hashtable:当 hash 类型中元素个数大于等于 hash-max-ziplist-entries 配置项的值 或者 元素值总长度大于等于 hash-max-ziplist-value 配置项的值时,Redis 使用 hashtable 编码。
list类型基本介绍
list 类型相当于 数组 或者 链表。但其内部的编码方式并不是一个数组,其更接近于 “双端队列” (Deque)。
列表中元素是有序的,该有序并不是 “升序” 或者 “降序”,而是元素在列表中的位置的先后顺序。
列表中的元素是可以重复的。
获取和删除的区别,获取相当于 peek
,删除相当于 pop
。
list类型常用命令
LPUSH
LPUSH key element [element...]
- 该命令可以一次插入多个元素。
- 这里的
L
表示的是left
,即从左边插入,也就是头插。 - 返回值是插入元素后列表的长度。
LRANGE
LRANGE key start stop
- 该命令可以获取列表中指定范围的元素。
start
和stop
是索引,都可以是负数,表示从列表的末尾开始计数(-1 表示最后一个元素,-2 表示倒数第二个元素,以此类推)。两个区间都是闭区间。start
和stop
都可以超过实际列表的索引范围,也不会报错。
LPUSHX
LPUSHX key element [element...]
- 该命令和
LPUSH
类似,但只在列表存在时才插入元素。 - 如果列表不存在,则返回 0,表示插入失败。
RPUSH
RPUSH key element [element...]
- 与
LPUSH
类似,但从右边插入,也就是尾插。
RPUSHX
RPUSHX key element [element...]
- 与
LPUSHX
类似。
LPOP
LPOP key [count]
- 该命令可以从列表左边弹出一个元素,也就是头删。
- 如果不填
count
,则默认弹出一个元素。如果填count
,则弹出count
个元素。
RPOP
RPOP key [count]
- 与
LPOP
类似,但从右边弹出,也就是尾删。
LINDEX
LINDEX key index
- 该命令可以获取列表中指定索引的元素。
index
可以是负数,表示从列表的末尾开始计数。- 如果索引越界,则返回
nil
。 - 时间复杂度为 O(N),N 为列表的长度。
LINSERT
LINSERT key <BEFORE|AFTER> pivot element
- 该命令可以在列表中插入元素。
element
为需要插入的元素。pivot
为需要插入到哪个元素的前面或后面。如果为BEFORE
,则插入到pivot
元素的前面;如果为AFTER
,则插入到pivot
元素的后面。- 如果
pivot
元素不存在,则返回-1
,表示插入失败。 - 如果
pivot
存在多个,则从左往右遍历匹配第一个pivot
在其前面或后面插入。 - 返回值为插入后的列表长度。
- 时间复杂度为 O(N),N 为列表的长度。
LLEN
LLEN key
- 该命令可以获取列表的长度。
LREM
LREM key count element
- 该命令可以删除列表中指定元素。
count
为删除的元素个数。- 如果
count
等于0
,则删除所有element
。 - 如果
count
小于0
,则从右往左开始遍历依此删除count
个element
。 - 如果
count
大于0
,则从左往右开始遍历依此删除count
个element
。
LTRIM
LTRIM key start stop
- 保留
start
和stop
之间的元素,删除区间之外的元素。
LSET
LSET key index element
- 该命令可以设置列表中指定索引的元素。
index
可以是负数,表示从列表的末尾开始计数。- 如果索引越界,则报错:
ERR index out of range
。
BLPOP
BLPOP key [key...] timeout
- 该命令为 阻塞 版本的
LPOP
。如果执行BLPOP
命令时,列表为空,则会阻塞timeout
秒,直到列表中有元素被加入。 BLPOP
可以同时监听多个key
,当其中一个key
加入元素后而不为空时,则返回该key
和被弹出的元素。- 如果多个客户端同时执行
BLPOP
,则最先执行BLPOP
的客户端会得到弹出的元素。
BRPOP
BRPOP key [key...] timeout
- 该命令为 阻塞 版本的
RPOP
。其特性与BLPOP
类似。
list编码方式
- 在早期的 Redis 版本中,list 类型有两种编码方式:
ziplist
和linkedlist
。 - 在 3.2 版本后,Redis 开始使用
quicklist
作为默认的 list 编码方式。 quicklist
使用linkedlist
组织(双向链表),但每一个元素都是一个ziplist
,这样可以降低内存占用。
list的应用场景
- 列表可以当作 “数组” 使用,用于存储多个元素。
- 列表可以搭配
LPOP
和LPUSH
或者RPOP
和RPUSH
当作 “栈” 使用,用于存储多个元素,先进后出。 - 列表可以搭配
LPUSH
和RPOP
或者RPUSH
和LPOP
当作 “队列” 使用,用于存储多个元素,先进先出。 - 列表还可以通过使用
BLPOP
和BRPOP
担当 “生产者消费模型” 中的消息队列。
相关文章:
Redis ⑥-string | hash | list
string类型基本介绍 Redis 中的字符串,是直接按照二进制的方式进行存储的。也就是说,在存取的过程中,是不会做任何编码转换的。存的是啥,取的时候就是啥。 Redis 的这个机制,就使得 Redis 非常适合用来存储各种各样的…...
动态规划(1)(java)(面试题)三步问题
题目: 三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。 示例 1: 输入:n 3 输…...
实时交互式AIGC系统开发:打造多模态数字人全栈解决方案
一、实时AIGC系统技术挑战 1.1 核心性能指标 指标 要求 实现难点 端到端延迟 <500ms 多模块流水线优化 多模态同步误差 <100ms 时间戳对齐机制 并发处理能力 100 QPS 分布式推理架构 生成内容一致性 跨模态对齐 联合embedding空间 1.2 系统架构设计 [语音输入] → [ASR]…...
tcp 和http 网络知识
1. 请简述TCP和HTTP的定义与基本概念 TCP:即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。它为互联网中的数据通信提供稳定的传输机制,在不可靠的IP层之上&a…...
伟世通与火山引擎深度合作 前沿AI智能座舱解决方案亮相上海车展
2025年4月24日,上海 —— 全球领先的汽车电子技术供应商伟世通与字节跳动旗下云服务平台火山引擎在2025上海车展联合举办新闻发布会,正式发布基于AI大模型的下一代智能座舱解决方案。该方案深度融合伟世通高性能域控平台与火山引擎豆包大模型的AI能力&am…...
中国250米土壤质地类型数据
土壤质地指土壤中砂粒、粉粒和黏粒的相对含量和组成。根据土壤质地的不同,可以将土壤分为砂土、壤土、黏土等类型。土壤质地对土壤的物理性质(如渗透性、保水性)和化学性质(如养分含量)有重要影响。 本数据集是以250米…...
springboot2.x升级到3.x 惨痛经验总结
一、前言(废话) 升级的缘由 都是因为:Spring 目录遍历漏洞(CVE-2024-38816) 可参考文章:springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816) 然后就趁着工…...
【Python】保持Selenium稳定爬取的方法(防检测策略)
selenium 防检测策略的方法汇总: 合理设置延迟:请求间添加随机延迟 (2-10秒) 限制爬取频率:控制每小时/每天的请求量 轮换用户代理:准备至少10个不同的User-Agent 使用住宅代理:优先选择高质量的住宅代理IP 处理验…...
【Linux】进程优先级和进程切换
📝前言: 这篇文章我们来讲讲进程优先级和进程切换: 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入…...
基于 Python(selenium) 的今日头条定向爬虫:根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容
该项目能够根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容。 一、项目准备 1. 开发环境配置 操作系统:支持 Windows、macOS、Linux 等主流操作系统,本文以 Windows 为例进行说明。Python 版本:建议使用 Python 3.8 及以上版本,以确保代码的兼容性和性能。…...
AIDL进程间通信
一、项目开启AIDL 在使用AIDL的模块下build.gradle 文件中添加以下代码 android {...buildFeatures {aidl true} }操作完需要rebuild 二、创建aidl服务接口 假设当前所需要的包名为com.jingluo.test_aidl ,那么aidl就需要处于同样的路径下,即如下目录…...
线程同步与互斥
系统11. 线程同步与互斥 1. 线程互斥 1-1 进程线程间的互斥相关背景概念 临界资源:多线程执⾏流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有…...
腾讯一面面经:总结一下
1. Java 中的 和 equals 有什么区别?比较对象时使用哪一个 1. 操作符: 用于比较对象的内存地址(引用是否相同)。 对于基本数据类型、 比较的是值。(8种基本数据类型)对于引用数据类型、 比较的是两个引…...
某地农产品交易中心钢网架自动化监测项目
1. 项目简介 本项目规划建设现代物流产业园,新建6万平方米仓库,具体为新建3栋钢构仓库2万平方米,2栋砖混结构仓库1万平方米,3栋交易中心2万平方米,改造现有3栋3层砖混结构仓库1万平方米,配备智能化仓库物流…...
PGSql查看表结构以及注释信息
创建视图 CREATE OR REPLACE VIEW dbo.v_sys_tableinfo AS SELECT pc.relname AS tablename, pa.attname AS columnname, pt.typname AS columntype, CASE WHEN pa.attlen > 0 THEN pa.attlen::integer ELSE pa.atttypmod - 4 END AS columnlength, pa.attnotnull …...
C++23 中 constexpr 的重要改动
文章目录 1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)示例代码 2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)示例代码 3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)示例代码 4. 不存在满足核心常量…...
Linux服务器上mysql8.0+数据库优化
1.配置文件路径 /etc/my.cnf # CentOS/RHEL /etc/mysql/my.cnf # Debian/Ubuntu /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian检查当前配置文件 sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$&q…...
深度学习之卷积神经网络入门
一、引言 在深度学习蓬勃发展的今天,卷积神经网络(Convolutional Neural Network,简称 CNN)凭借其在图像识别、计算机视觉等领域的卓越表现,成为了人工智能领域的核心技术之一。从手写数字识别到复杂的医学影像分析&a…...
【kafka初学】启动执行命令
接上篇,启动:开两个cdm窗口 注意放的文件不要太深或者中文,会报命令行太长的错误 启动zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 启动kafka-serve bin\windows\kafka-server-start.bat config\serv…...
MoE架构解析:如何用“分治”思想打造高效大模型?
在人工智能领域,模型规模的扩大似乎永无止境。从GPT-3的1750亿参数到传闻中的GPT-4万亿级规模,每一次突破都伴随着惊人的算力消耗。但当我们为这些成就欢呼时,一个根本性问题愈发尖锐:如何在提升模型能力的同时控制计算成本&#…...
【Qt】文件
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 Qt 文件概述 二:🔥 输入输出设备类 三:🔥 文件读写类 四:🔥 文件和目录信息类 五&…...
Linux常见故障:排查思路与错误分析指南
引言 当Linux系统"生病"时,它不会说话但却会通过各种症状"求救"🆘!本文将带你建立系统化的故障排查思维,从磁盘到内存,从网络到服务,全方位掌握Linux系统的"把脉问诊"技巧。…...
基于随机变量的自适应螺旋飞行麻雀搜索算法(ASFSSA)优化BP神经网络,附完整完整代码
3. 麻雀搜索算法 麻雀群体分为两个角色,即发现者和跟随者。它们有三个行为:觅食、跟随和侦察。发现者的任务是寻找食物并告知跟随者食物的位置。因此,发现者需要在一个大范围内搜索,而跟随者的觅食范围通常较小。这是更新发现者位…...
vscode切换Python环境
跑深度学习项目通常需要切换python环境,下面介绍如何在vscode切换python环境: 1.点击vscode界面左上角 2.在弹出框选择对应kernel...
Gradle安装与配置国内镜像源指南
一、Gradle简介与安装准备 Gradle是一款基于JVM的现代化构建工具,广泛应用于Java、Kotlin、Android等项目的构建自动化。相比传统的Maven和Ant,Gradle采用Groovy或Kotlin DSL作为构建脚本语言,具有配置灵活、性能优越等特点。 在开始安装前…...
施工配电箱巡检二维码应用
在过去,施工配电箱的巡检主要依赖于纸质记录方式。巡检人员每次巡检时,都要在纸质表格上详细填写配电箱的各项参数、运行状况以及巡检时间等信息。这种方式在实际操作中暴露出诸多严重问题,信息易出现错误、数据会有造假现象、数据量庞大整理…...
全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
一、工业化AIGC系统架构 1.1 生产流程设计 [需求输入] → [创意生成] → [多模态生产] → [质量审核] → [多平台分发] ↑ ↓ ↑ [用户反馈] ← [效果分析] ← [数据埋点] ← [内容投放] 1.2 技术指标要求 指标 标准值 实现方案 单日产能 1,000,000 分布式推理集群 内容合规率…...
第19章:Multi-Agent多智能体系统介绍
第19章:Multi-Agent多智能体系统介绍 欢迎来到多智能体系统 (Multi-Agent System, MAS) 的世界!在之前的章节中,我们深入探讨了单个 AI Agent 的构建,特别是结合了记忆、上下文和规划能力的 MCP 框架。然而,现实世界中的许多复杂问题往往需要多个智能体协同工作才能有效解…...
【C++游戏引擎开发】第25篇:方差阴影贴图(VSM,Variance Shadow Maps)
一、VSM 的核心思想 1.1 VSM 的核心思想 1.1.2 从深度到概率的转变 VSM 的核心创新在于将阴影判定从深度比较转换为概率估算。通过存储深度分布的统计信息(均值和方差),利用概率不等式动态计算阴影强度,从而支持软阴影并减少锯齿。 1.1.3 深度分布的统计表示 VSM 在阴…...
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
贪心算法 Part05 合并区间 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组࿰…...
yum包管理器
1.介绍 yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器.自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的安装包。 2.yum基本指令 查询yum服务器是否有需要安装的软件: yum list I grep xx软件列表. 安装指定的yum包&…...
Linux多线程技术
什么是线程 在一个程序里的多执行路线就是线程。线程是进程中的最小执行单元,可理解为 “进程内的一条执行流水线”。 进程和线程的区别 进程是资源分配的基本单位,线程是CPU调度的基本单位。 fork创建出一个新的进程,会创建出一个新的拷贝&…...
通过模仿学习实现机器人灵巧操作:综述(上)
25年4月来自天津大学、山东大学、瑞士ETH、南方科技大学、通用 AI 国家重点实验室、爱丁堡大学和中科院自动化所的论文“Dexterous Manipulation through Imitation Learning: A Survey”。 灵巧操作是指机械手或多指末端执行器通过精确、协调的手指运动和自适应力调制&#x…...
LLM数学推导——Transformer问题集——注意力机制——稀疏/高效注意力
Q13 局部窗口注意力的内存占用公式推导(窗口大小 ) 局部窗口注意力:解决长序列内存困境的利器 在注意力机制中,全局注意力需要计算序列中每个元素与其他所有元素的关联,当序列长度 N 较大时,权重矩阵的内…...
Git 入门知识详解
文章目录 一、Git 是什么1、Git 简介2、Git 的诞生3、集中式 vs 分布式3.1 集中式版本控制系统3.2 分布式版本控制系统 二、GitHub 与 Git 安装1、GitHub2、Git 安装 一、Git 是什么 1、Git 简介 Git 是目前世界上最先进的分布式版本控制系统。版本控制系统能帮助我们更好地管…...
系统架构师2025年论文《论软件架构评估》
论软件架构评估 摘要: 我所在的单位是国内某知名医院,2017 年 1 月医院决定开发全新一代某市医院预约挂号系统,我担任本次系统的架构师,主要负责整个系统的架构设计工作。该系统旨在优化医院挂号流程,提高患者就医体验,是医院应对医疗信息化变革和提升服务的重要举措。…...
基于51单片机的超声波液位测量与控制系统
基于51单片机液位控制器 (仿真+程序+原理图PCB+设计报告) 功能介绍 具体功能: 1.使用HC-SR04测量液位,LCD1602显示; 2.当水位高于设定上限的时候,对应声光报警报警&…...
抓包工具Wireshark的应用解析
一、Wireshark简介 Wireshark(前身为Ethereal)是一款开源、跨平台的网络协议分析工具,自1998年诞生以来,已成为网络工程师、安全专家及开发者的核心工具之一。它通过网卡的混杂模式(Promiscuous Mode)捕获…...
在 Java 项目中搭建和部署 Docker 的详细流程
引言 在现代软件开发中,Docker 已成为一种流行的工具,用于简化应用的部署和运行环境的一致性。本文将详细介绍如何在 Java 项目中搭建和部署 Docker,包括配置文件、代码示例以及流程图。 一、整体工作流程 以下是整个流程的概览:…...
15.ArkUI Checkbox的介绍和使用
以下是 ArkUI Checkbox 组件的详细介绍和使用指南: 一、Checkbox 基础介绍 功能特性: 提供二态选择(选中/未选中)支持自定义样式和标签布局支持与数据状态绑定提供状态变化事件回调 适用场景: 表单中的多选操作设置…...
WebUI可视化:第5章:WebUI高级功能开发
学习目标 ✅ 掌握复杂交互逻辑的实现 ✅ 学会自定义界面样式与布局 ✅ 实现安全高效的文件处理 ✅ 优化性能与用户体验 5.1 自定义样式开发 5.1.1 修改主题颜色(以Streamlit为例) 在应用入口处添加全局样式: python import streamlit as st # 自定义主题 st.markdown…...
增加首屏图片
增加首屏图片(bg.jpg) web-mobile类型打包 //index.html脚本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戏内脚本…...
联合体和枚举类型
1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样,联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成,这些成员变量既可以是不同的类型,也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...
《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现
构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现 引言 随着AI技术的快速发展,构建自己的AI助手聊天网站变得越来越流行。本研究报告将详细介绍如何通过两台电脑构建一个完整的AI聊天系统,其中一台作为WEB服务器运行F…...
kubernets集群的安装-node节点安装-(简单可用)-超详细
一、kubernetes 1、简介 kubernetes,简称K8s(库伯内特),是用8代替名字中间的8个字符“ubernete”而成的缩写 云计算的三种主要服务模式——基础设施即服务(IaaS)、平台即服务(PaaS࿰…...
【Linux内核设计与实现】第三章——进程管理04
文章目录 8. exit() 进程退出8.1. exit() 系统调用的定义8.2. do_exit() 函数8.2.0. do_exit() 的参数和返回值8.2.1. 检查和同步线程组退出8.2.2. 清理与调试相关的资源8.2.3. 取消 I/O 和信号处理8.2.4. 检查线程组是否已终止8.2.5. 释放系统资源8.2.6. 释放线程和调度相关资…...
Golang | 迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象(如列表、树等集合结构)中元素的方法,而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦,迭代器模式使…...
美颜SDK动态贴纸实战教程:从选型、开发到上线的完整流程
在直播、短视频、社交娱乐全面崛起的当下,美颜SDK早已不再局限于“磨皮瘦脸”,而是逐步迈向更智能、更富互动体验的方向发展。动态贴纸功能,作为提升用户参与感和内容趣味性的关键手段,正在被越来越多的平台采纳并深度定制。本文将…...
ArkTS中的空安全:全面解析与实践
# ArkTS中的空安全:全面解析与实践 在ArkTS编程领域,空安全是一个极为关键的特性,它在很大程度上影响着代码的稳定性和可靠性。今天,我们就深入探究一下ArkTS中的空安全机制,看看它是如何保障我们的代码质量的。 ## A…...
C语言基础语法详解:从入门到掌握
C 基础语法 C 语言是一种通用的编程语言,广泛应用于系统编程、嵌入式开发和高性能计算等领域。 C 语言具有高效、灵活、可移植性强等特点,是许多其他编程语言的基础。 在 C 语言中,令牌(Token)是程序的基本组成单位…...