Redis 03章——10大数据类型概述
一、which10
(1)一图
(2)提前声明
这里说的数据类型是value的数据类型,key的类型都是字符串
官网:Understand Redis data types | Docs
(3)分别是
1.3.1redis字符串(String)
- string是redis最基本的类型,一个key对应一个value
- string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象
- 一个redis中字符串value最多可以是512M
1.3.2redis列表(List)
- Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
1.3.3redis哈希表(Hash)
- Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象
- Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)
1.3.4redis集合(Set)
- Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable
- Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
- 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)
1.3.5redis有序集合(ZSet)
- Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员
- 不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序
- zset的成员是唯一的,但分数(score)却可以重复
- zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1
1.3.6redis地理空间(GEO)
- 添加地理位置的坐标
- 获取地理位置的坐标
- 计算两个位置之间的距离
- 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
1.3.7redis基数统计(HyperLogLog)
- HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的
- 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比
- 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素
1.3.8redis位图(bitmap)
- 图示:

- 由0和1状态表现的二进制位的bit数组
1.3.9redis位域(bitfield)
- 通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果
- 说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作
1.3.10redis流(Stream)
- Redis Stream 是 Redis 5.0 版本新增加的数据结构
- Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃
- 简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息
- 而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
二、去哪里获得redis常见数据类型操作命令
- 官网英文:https://redis.io/commands/
- 中文:http://www.redis.cn/commands.html
三、Redis键(key)
(1)常用

(2)案例
3.2.1keys *
- 作用:查看当前库所有的key
- 案例演示:

3.2.2exists key
- 作用:判断某个key是否存在(返回1代表true,返回0代表false)
- 案例演示:

3.2.3type key
- 作用:查看键(key)对应的值的数据类型
- 案例演示:

3.2.4del key
- 作用:删除指定的key数据
- 案例演示:

3.2.5unlink key
- 作用:非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作
- 案例演示:

3.2.6ttl key
- 作用:查看还有多少秒过期,-1表示永不过期(默认),-2表示已过期
- 案例演示:

3.2.7expire key 秒钟
- 作用:为给定的key设置过期时间
- 案例演示:如上
3.2.8move key dbindex
- 作用:将当前数据库的key移动到给定的数据库DB当中
- 案例演示:

3.2.9select dbindex
- 作用:切换数据库【0-15】,默认在0号数据库
- 案例演示:

3.2.10dbsize
- 作用:查看当前数据库key的数量
- 案例演示:

3.2.11flushdb
- 作用:清空当前库
- 案例演示:

3.2.12flushall
- 作用:通杀全部库
- 案例演示:

四、数据类型命令及落地应用
(1)官网命令大全网址
- 英文:Commands | Docs
- 中文:http://www.redis.cn/commands.html
(2)备注
- 命令不区分大小写,而key是区分大小写的
- 永远的帮助命令,help @类型
- help @string
- help @list
- help @hash
- help @hyperloglog
- ......
(3)Redis字符串(String)
4.3.1常用

4.3.2单值单value
4.3.3案例
(1)最常用
- set key value



- get key,如上(一旦过期,get key的结果就是nil)
- 如何获得设置指定的 Key 过期的 Unix 时间,单位为秒
System.out.println(Long.toString(System.currentTimeMillis()/1000L)); - keepttl


- keepttl的作用:在对键执行特定操作时保留该键原有的过期时间设置
(2)同时设置/获取多个键值
- MSET key value [key value...]
- MGET key [key ...]
- mset/mget/msetnx

- 注意:msetnx要求所有给定的键在 Redis 中都不存在,才会执行设置操作。只要有一个键已经存在,(1)那么整个操作就会失败,(2)并且不会对任何键进行设置

(3)获取指定区间范围内的值
- getrange/setrange
- 案例演示:

(4)数值增减
- 一定要是数据才能进行加减
- 递增数字:INCR key

- 增加指定的整数:INCRBY key increment

- 递减数值:DECR key
- 减少指定的整数:DECRBY key decrement
(5)获取字符串长度和内容追加
- 获取字符串长度:strlen key
- 字符串内容追加:append key value

- 总结:
- NX:若键已存在则不做修改并返回操作失败(仅在键不存在时执行)
- XX:若键不存在则不创建新键并返回操作失败,可用于更新已存在键的值(仅在键已经存在时执行)
(6)分布式锁
- setnx key value
- setex(set with expire)键秒值/setnx(set if not exist)

(7)getset(先get再set)
- getset:将给定key的值设为value,并返回key的旧值(old value)
- 简单一句话:先get然后立即set

(8)应用场景
- 比如抖音无线点赞某个视频或者商品,点一下加一次

- 是否喜欢的文章

(4)Redis列表(List)
4.4.1常用

4.4.2单key多value
4.4.3简单说明
- 一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景
- left、right都可以插入添加
- 如果键不存在,创建新的链表
- 如果键已存在,新增内容
- 如果值全移除,对应的键也就消失了

4.4.4案例
(1)lpush/rpush/lrange 注:没有rrange
- 案例演示:

- lpush:可以这么理解,将1,2,3,4,5逐个添加到链表左端

- rpush:可以这么理解,将11,22,33,44,55逐个添加到链表右端

(2)lpop/rpop
- lpop:从左边开始弹

- rpop:从右边开始弹

(3)lindex,按照索引下标获得元素(从上到下)

(4)llen,获取List列表中元素的个数

(5)lrem key 数字N 给定值v1
- 解释:删除N个值等于v1的元素
- 案例演示:

(6)ltrim key 开始index 结束index
- 作用:截取指定范围的值后再赋值给key

- 案例演示:

(7)rpoplpush 源列表 目的列表
- 作用:移除列表的最后一个元素,并将该元素添加到另一个列表并返回
- 案例演示:

(8)lset key index value
- 作用:让指定数组集合的小标位置值替换成新值
- 案例演示:

(9)linsert key before/after 已有值 插入的新值
- 作用:

- 案例演示:

(10)应用场景
微信公众号订阅的消息
(5)Redis哈希(Hash)
4.5.1常用 
4.5.2KV模式不变,但V是一个键值对
4.5.3案例
(1)hset/hget/hmset/hmget/hgetall/hdel

(2)hlen
- 作用:返回key中字段的数量
- 案例演示:

(3)hexists
- 作用:检查key的某个字段是否存在
- 案例演示:

(4)hkeys/hvals
- 作用
- HKEYS:获取哈希键所有字段
- HVALS:获取哈希键所有值
- 案例演示:

(5)hincrby/hincrbyfloat

(6)hsetnx
- 作用:仅当指定字段不存在时设值
- 案例演示:

(7)应用场景
JD购物车早期,目前不再采用,当前中小厂可用
(6)Redis集合(Set)
4.6.1常用 
4.6.2单值多value,且无重复
4.6.3案例
(1)SADD key member [member ...]
- 作用:添加一个或多个成员,返回实际添加的成员数量
- 案例演示:

(2)SMEMBERS key
- 作用:遍历集合中的所有元素
- 案例演示:

(3)SISMEMBER key member
- 作用:判断元素是否在集合中
- 案例演示:

(4)SREM key member [member ...]
- 作用:移除一个或多个成员,返回实际移除的成员数量
- 案例演示:

(5)scard
- 作用:获取集合里面元素的个数
- 案例演示:

(6)SRANDMEMBER key [数字]
- 作用:从集合中随机返回指定数量的成员,不指定数量则返回一个
- 案例演示:

(7)SPOP key [数字]
- 作用:从集合中随机弹出一个元素,出一个删一个
- 案例演示:

(8)smove key1 key2 在key1里已存在的某个值
- 作用:将key1里已存在的某个值移动到key2
- 案例演示:

(9)集合运算-集合的差集运算A-B
- 作用:返回存在于集合 A 但不存在于集合 B 的所有成员
- 案例演示:


(10)集合运算-集合的并集运算A∪B
- 作用:返回集合 A 和集合 B 中所有不重复的成员
- 案例演示:

(11)集合运算-集合的交集运算A∩B
- 作用:返回同时存在于集合 A 和集合 B 中的成员
- 注意:

- 案例演示:

(12)应用场景
- 微信抽奖小程序
- 微信朋友圈点赞查看同赞朋友
- QQ内推可能认识的人
(7)Redis有序集合Zset(sorted set)
4.7.1多说一句
在set基础上,每个val值前加一个score分数值。之前set是k1 v1 v2 v3,现在zset是 k1 score1 v1 score2 v2
4.7.2常用
4.7.3案例
(1)ZADD key score member [score member ...]
- 作用:添加元素
- 案例演示:

(2)ZRANGE key start stop [WITHSCORES]
- 作用:按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素
- 案例演示:


(3)zrevrange key start stop [WITHSCORES]
- 作用:反转集合,按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素
- 案例演示:


(4)ZRANGEBYSCORE key min max 【WITHSCORES】【LIMIT offset count】
- 作用:
- 获取指定分数范围的元素,可以在min和max前面加个(,表示不包含
- limit作用是返回限制,limit开始下标步,一共多少步
- 案例演示:



(5)ZSCORE key member
- 作用:获取元素的分数
- 案例演示:

(6)ZCARD key
- 作用:获取集合中元素的数量
- 案例演示:

(7)zrem key member [member ...]
- 作用:某个score对应的value值,作用是删除元素
- 案例演示:

(8)ZINCRBY key increment member
- 作用:增加某个元素的分数
- 案例演示:

(9)ZCOUNT key min max
- 作用:获得指定分数内的元素个数
- 案例演示:

(10)ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
- 作用:从键名列表中的第一个非空排序集中弹出一个或多个元素,他们是成员分数对
- 案例演示:

(11)zrank key member [withscore]
- 作用:获得下标值
- 案例演示:

(12)zrevrank key member [withscore]
- 作用:逆序获得下标值
- 案例演示:

(13)应用场景
根据商品销售对商品进行排序显示
(8)Redis位图(bitmap)
4.8.1一句话
由0和1状态表现的二进制位的bit数组
4.8.2看需求
- 用户是否登陆过Y、N,比如软件的每日签到功能
- 电影、广告是否被点击播放过
- 钉钉打卡上下班,签到统计
4.8.3是什么
- 图示:

- 说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型
- 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)
- Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
4.8.4能干嘛
用于状态统计,Y、N类似AtomicBoolean
4.8.5基本命令
(1)setbit key offset value
- 作用:

- 注意:
- setbit键 偏移位 只能0或者1
- Bitmap的偏移量是从0开始算的
- 案例演示:

(2)getbit key offset
(3)strlen key
- 作用:统计字节数占用多少

- 案例演示:

(4)bitcount key [start end [byte|bit]]
- 作用:全部键里面含有1的有多少个
- 案例演示:

(5)bitop operation(AND|OR|XOR|NOT) destkey key [key ...]
- 作用:

- 案例演示:


(6)setbit和getbit案例说明
(7)应用场景
- 一年365天,全年天天登录占用多少字节

- 按照年
- 按年去存储一个用户的签到情况,365 天只需要 365 / 8 ≈ 46 Byte,1000W 用户量一年也只需要 44 MB 就足够了
- 假如是亿级的系统,每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高
- 此外,在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销
(9)Redis基数统计(HyperLogLog)
4.9.1看需求
- 统计某个网站的UV、统计某个文章的UV
- 什么是UV?Unique Visitor,独立访客,一般理解为客户端IP,需要去重考虑
- 用户搜索网站关键词的数量
- 统计用户每天搜索不同词条个数
4.9.2是什么
- 去重复统计功能的基数估计算法-就是HyperLogLog

- 基数:
- 是一种数据集,去重复后的真实个数
- 案例case

- 基数统计:用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算
- 一句话:去重脱水后的真实数据
4.9.3基本命令

(10)Redis地理空间(GEO)
4.10.1简介
- 移动互联网时代LBS应用越来越多,外卖软件中附近的美食店铺、高德地图附近的核酸检查点等等,那这种附近各种形形色色的XXX地址位置选择是如何实现的
- 地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置
- 例如滴滴打车,最直观的操作就是实时记录更新各个车的位置,然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
4.10.2原理
4.10.3Redis在3.2版本后增加了地理位置的处理
4.10.4命令
(1)GEOADD key longitude latitude member [longitude latitude member]
- 作用:添加经纬度坐标
- 案例演示:

- 中文乱码如何处理:


(2)GEOPOS key member [member]
- 作用:返回经纬度
- 案例演示:

(3)GEODIST key member1 member2 [M|KM|FT|MI]
- 作用:


- 案例演示:

(4)GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]
- 作用:以半径为中心,查找附近的xxx

- 案例演示:

(5)GEORADIUSBYMEMBER
- 作用:

- 案例演示:

(6)GEOHASH
- 作用:返回坐标的geohash表示


- 案例演示:

(11)Redis流(Stream)
4.11.1是什么
- Redis消息队列的2种方案
- List实现消息队列,List实现方式其实就是点对点的模式

-
Pub/Sub

- List实现消息队列,List实现方式其实就是点对点的模式
- Redis5.0版本新增了一个更强大的数据结构---Stream
- 一句话:Stream流就是Redis版的MQ消息中间件+阻塞队列
4.11.2能干嘛
实现消息队列,它支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加的稳定和可靠
4.11.3底层结构和原理说明

4.11.4基本命令理论简介
- 队列相关指令:

- 消费组相关指令:

- 四个特殊符号:

4.11.5基本命令代码实操
(1)队列相关指令
一、XADD
- 作用:添加消息到队列的末尾



- 案例演示:

二、XRANGE key start end [COUNT count]
- 作用:用于获取消息列表(可以指定范围),忽略删除的消息

- 案例演示:


三、XREVRANGE key end start [COUNT count]
- 作用:与xrange的区别在于,获取消息列表元素的方向是相反的,end在前,start在后
- 案例演示:

四、XDEL
- 作用:删除指定消息 ID 对应的消息
- 案例演示:

五、XLEN
- 作用:包含的消息数量
- 案例演示:

六、XTRIM
- 作用:用于对Stream的长度进行截取,如超长会进行截取

- 案例演示:


七、XREAD
- 作用:用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息
- 非阻塞:

- 阻塞:

- 非阻塞:
- 案例演示(非阻塞):


- 案例演示(阻塞):


- 图示:

(2)消费组相关指令
一、XGROUP CREATE key group id|$
- 作用:用于创建消费者组

- 案例演示:

二、XREADGROUP GROUP group [COUNT count] [BLOCK milliseconds] STREAMS key id
- 作用:">",表示从第一条尚未被消费的消息开始读取

- 注意:不同消费组的消费者可以消费同一条消息

- 案例演示:


- 消费者组的目的?


三、重点问题

四、XPENDING
- 作用1:查询每个消费组内所有消费组所有消费者【已读取,但尚未确认】的消息

- 作用2:


- 案例演示:

五、XACK
- 作用:向消息队列确认消息处理已完成
- 案例演示:

(3)XINFO 用于打印Stream\Consumer\Group的详细信息


4.11.6使用建议
Stream还是不能100%等于Kafka、RabbitMQ来使用的,生产案例少,慎用
(12)Redis位域(bitfield)
4.12.1了解即可
4.12.2是什么
- 如图:

- 中文文档:
4.12.3能干嘛
- 用途:

- 位域修改
- 溢出控制
- Ascii码表:https://ascii.org.cn
4.12.4一句话
将一个redis字符串看作是一个由二进制位组成的数组并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
4.12.5命令基本语法
4.12.6案例
(1)BITFIELD key [GET type offset]

(2)BITFIELD key set type offstet value

(3)BITFIELD key [INCRBY type offset increment]

(4)溢出控制 OVERFLOW [WRAP|SAT|FAIL]





(13)总结

相关文章:
Redis 03章——10大数据类型概述
一、which10 (1)一图 (2)提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 官网:Understand Redis data types | Docs (3)分别是 1.3.1redis字符串࿰…...
bps是什么意思
本文来自DeepSeek "bps" 是 "bits per second" 的缩写,表示每秒传输的比特数,用于衡量数据传输速率。1 bps 即每秒传输 1 比特。 常见单位 bps:比特每秒 Kbps:千比特每秒(1 Kbps 1,000 bps&am…...
撕碎QT面具(1):Tab Widget转到某个Tab页
笔者未系统学过C语法,仅有Java基础,具体写法仿照于大模型以及其它博客。自我感觉,如果会一门对象语言,没必要先刻意学C,因为自己具有对象语言的基础,等需要用什么再学也不迟。毕竟不是专门学C去搞算法。 1…...
PCL源码分析:点云数学形态学操作
文章目录 一、简介二、源码分析三、实现效果参考资料一、简介 基本原理:使用结构元素(通常为滤波的窗口)的窗口模板作为处理单元,利用形态学中的膨胀与腐蚀相组合即可达到滤波的效果。 点云数据中的数学形态学运算其实和二维图像上的运算非常相似,图像上像素有x,y和亮度值…...
项目版本号生成
需求 项目想要生成一个更新版本号,格式为v2.0.20250101。 其中v2.0为版本号,更新时进行配置;20250101为更新日期,版本更新时自动生成。 实现思路 创建一个配置文件version.properties,在其中配置版本号;…...
rtsp rtmp 跟 http 区别
一 会话管理 与SDP 1. RTSP(Real Time Streaming Protocol) (1) 是否需要建立会话? 需要显式会话。 RTSP 是基于会话的协议,客户端与服务端通过 SETUP、PLAY、TEARDOWN 等命令明确控制会话生命周期。 会话标识:通过…...
善筹网设计与实现(代码+数据库+LW)
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…...
SQL SERVER的PARTITION BY应用场景
SQL SERVER的PARTITION BY关键字说明介绍 PARTITION BY关键字介绍具体使用场景排名计算累计求和分组求最值分组内百分比计算分组内移动平均计算分组内数据分布统计分组内数据偏移计算 总结 PARTITION BY关键字介绍 在SQL SERVER中,关键字PARTITION BY主要用于窗口函…...
使用 MindSpore 训练 DeepSeek-V3 模型
MindeSpore 已经适配 DeepSeek-V3 的训练推理啦,下面是使用 MindSpore 对DeepSeek-V3做训练的过程。 一、环境确认 这里呢我使用的是 8张 910B2 的显卡: 其中 MindSpore Transformers 的环境依赖如下: PythonMindSporeCANN固件与驱动3.1…...
生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用
技术原理(数学公式示意图) 核心对抗公式 min G max D V ( D , G ) E x ∼ p d a t a [ log D ( x ) ] E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) \mathbb{E}_{x\sim p_{data}}[\log D(x)] \mathbb{E}_{z\sim p_…...
DeepSeek R1完全本地部署实战教程01-课程大纲
一、课程体系 二、学习目标: 了解基础知识掌握安装部署学会搭建可视化界面能力水平进阶三、课程特点: 案例驱动工程实战完整体系四、课程大纲 1.DeepSeek R1 项目运行演示 【视频课程】 (1)可视化交互 (2)联网搜索 (3)本地知识库 2.环境安装部署 【视频课程】 (1)软…...
redis cluster测试
集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41,查看41的日志,发现他成为了新的master 这时候我们在将172.30.60.41也杀死,会发现集群异常了 尝试把172.30.60.31启动ÿ…...
跨平台AES/DES加密解密算法【超全】
算法说明 要实现在 WinForm、Android、iOS、Vue3 中使用 相同的算法,确保各平台加密结果互通 一、统一加密参数 算法: AES-256-CBC 密钥: 32字节(示例中使用固定字符串生成) IV: 16字节 填充模式: PKCS7 字符编码: UTF-8 输出格式: Base64二、各平台实现代码...
关于前后端分离跨域问题——使用DeepSeek分析查错
我前端使用ant design vue pro框架,后端使用kratos框架开发。因为之前也解决过跨域问题,正常是在后端的http请求中加入中间件,设置跨域需要通过的字段即可,代码如下所示: func NewHTTPServer(c *conf.Server, s *conf…...
数据恢复-01-机械硬盘的物理与逻辑结构
磁盘存储原理 磁盘存储数据的原理: 磁盘存储数据的原理是利用磁性材料在磁场作用下的磁化性质,通过在磁盘表面上划分成许多小区域,根据不同的磁化方向来表示0和1的二进制数据,通过读写磁头在磁盘上的移动,可以实现数据…...
pytest asyncio 支持插件 pytest-asyncio
pytest 是 Python 测试框架,但其不支持基于 asyncio 的异步程序(例如,测试 FastAPI 异步代码),pytest-asyncio 是一个 pytest 插件,该插件赋予 pytest 可以测试使用 asyncio 库代码的能力。 https://github…...
网络工程师 (35)以太网通道
一、概念与原理 以太网通道,也称为以太端口捆绑、端口聚集或以太链路聚集,是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作,共同承担数据传输任务,从而提高了网络的传输能力和可靠性。 二…...
USB2.03.0摄像头区分UVC相机在linux中的常用命令
这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准,但根据行业常见规范分析如下: USB接口颜色与版本对照表: 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…...
【推理llm论文精度】DeepSeek-R1:强化学习驱动LLM推理能力飞跃
最近deepseek R1模型大火,正好复习一下他家的技惊四座的论文https://arxiv.org/pdf/2501.12948 近年来,大型语言模型(LLM)在推理能力上取得了显著进展,但如何进一步有效提升仍然是研究热点。DeepSeek-AI发布了 DeepS…...
从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用
文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合,使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3(knife4j) 1.6.1 整…...
使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
以下是一个完整的 Python 爬虫代码示例,用于爬取 B 站视频并使用 FFmpeg 合成高清视频。 1. 准备工作 确保安装了以下 Python 库和工具: bash复制 pip install requests moviepy2. 爬取视频和音频文件 B 站的视频和音频文件通常是分开存储的&#x…...
学习数据结构(9)栈和队列上
1.栈的概念 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作 的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出(先进先出)的原则 栈的插入操作叫做进栈/压栈/入栈ÿ…...
【ESP32】ESP-IDF开发 | WiFi开发 | HTTP服务器
1. 简介 1.1 HTTP HTTP(Hyper Text Transfer Protocol),全称超文本传输协议,用于从网络服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档…...
hbase合并队列超长问题分析
问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...
【YOLOv11改进- 主干网络】YOLOv11+CSWinTransformer: 交叉窗口注意力Transformer助力YOLOv11有效涨点;
YOLOV11目标检测改进实例与创新改进专栏 专栏地址:YOLOv11目标检测改进专栏,包括backbone、neck、loss、分配策略、组合改进、原创改进等 本文介绍 发paper,毕业皆可使用。 本文给大家带来的改进内容是在YOLOv11中更换主干网络为CSWinTransformer,助力YOLOv11有效涨点,…...
滚动弹幕案例
滚动弹幕案例 一、需求 1.页面上漂浮字体大小不一、颜色不一,从左向右滚动的弹幕; 2.底部中间有一个发送功能,可以发送新的弹幕; 3.底部的发送部分可以向下收起和弹出。 二、html <div class"container"><…...
图像处理篇---基本OpenMV图像处理
文章目录 前言1. 灰度化(Grayscale)2. 二值化(Thresholding)3. 掩膜(Mask)4. 腐蚀(Erosion)5. 膨胀(Dilation)6. 缩放(Scaling)7. 旋转…...
Linux软件编程(2)
一、标准IO 1.fread/fwrite size_t fwrite (const void *ptr,size_t size,size_t nmemb,FILE *stream); 功能:函数从指定的内存位置开始,将一块数据写入到指定的文件流中。 参数: ptr:指向要写入文件的数据块的指针 size:要写入的每个数据…...
vue框架生命周期详细解析
Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…...
2010年下半年软件设计师考试上午真题的知识点整理(附真题及答案解析)
以下是2010年下半年软件设计师考试上午真题的知识点分类整理,涉及定义的详细解释,供背诵记忆。 1. 计算机组成原理 CPU与存储器的访问。 Cache的作用: 提高CPU访问主存数据的速度,减少访问延迟。存储器的层次结构: 包括寄存器、Cache、主存和…...

