【Redis篇】Set和Zset 有序集合基本使用

目录

Set

基本命令

sadd

SMEMBERS

SISMEMBER

 SCARD

返回值:

SPOP

SMOVE

SREM

集合间操作

交集: 

并集:

差集:

​编辑

 内部编码

使用场景:

Zset 有序集合

Zset基本命令

ZADD

ZCARD 

ZCOUNT

 ZRANGE

ZREVRANGE

ZRANGEBYSCORE

ZPOPMAX

BZPOPMAX

​编辑

ZPOPMIN

ZRANK

ZREVRANK

 ZSCORE

ZREM

 ZREMRANGEBYRANK

ZREMRANGEBYSCORE

 ZINCRBY

集合间操作

ZINTERSTORE

 ZUNIONSTORE

内部编码

使用场景

Set

SET 是一个强大的数据结构,适合用于存储不重复的元素并执行高效的集合操作。

1. 无序集合

Redis 的 SET 是一个无序集合,它不保存任何元素的顺序。当你存储数据时,Redis 会在内部管理这些元素,但不保证它们的顺序。

2. 唯一性

SET 内的元素是唯一的,即集合中的每个元素不能重复。如果你尝试向一个集合中添加已存在的元素,Redis 会自动忽略这个操作。

基本命令

sadd

 将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。

语法:

SADD key member [member ...]
127.0.0.1:6379> sadd key a b c d e f a b c d
6
127.0.0.1:6379> smembers key
d
e
c
a
f
b

返回值:

  • 如果成员成功添加到集合中,则返回被添加的成员的数量(即新加入集合的成员数,忽略已经存在的成员)。
  • 如果一个成员已经存在于集合中,它不会被重新添加,SADD 不会计入该成员。

SMEMBERS

SMEMBERS 是一个用于获取集合(Set)中所有成员的命令。Redis 中的集合是一个无序且不重复的元素集合。

127.0.0.1:6379> sadd key a b c d e f a b c d
6
127.0.0.1:6379> smembers key
d
e
c
a
f
b

返回值:

  • 如果集合存在且有成员,SMEMBERS 返回集合中的所有成员,顺序不固定,因为 Redis 中的集合是无序的。
  • 如果集合为空,返回一个空的列表([])。
  • 如果该键不存在,返回空集合。

SISMEMBER

SISMEMBER用于检查给定的成员是否存在于指定的集合(Set)中

语法:

SISMEMBER key member
127.0.0.1:6379> sismember key a
1
127.0.0.1:6379> sismember key s
0

返回值:

  • 1:如果该成员存在于集合中。
  • 0:如果该成员不存在于集合中。
  • (integer) 0 or 1:返回整数 0 或 1,表示成员是否在集合中。

 SCARD

 SCARD 命令用于获取集合(Set)中元素的数量,也就是集合的基数(cardinality)。

语法:
 

SCARD key
127.0.0.1:6379> scard key
6

返回值:

  • 整数值:返回集合中元素的数量(即集合的基数)。如果集合为空,返回 0
  • 如果指定的 key 不存在,Redis 会返回 0,因为 Redis 会认为一个不存在的集合相当于一个空集合。

SPOP

SPOP 命令用于从集合(Set)中随机移除并返回一个或多个元素。如果集合为空,则命令会返回空结果。

语法:

SPOP key [count]
127.0.0.1:6379> spop key 2
f
c
127.0.0.1:6379> spop key 1
b
127.0.0.1:6379> spop key 12
a
d
e

返回值:

  • 单个元素:如果未指定 count,则返回集合中随机移除的一个元素。
  • 多个元素:如果指定了 count,则返回一个列表,包含随机移除的多个元素。
  • 如果集合为空或键不存在,则返回 (nil)

SMOVE

SMOVE 命令用于将一个元素从一个集合(Set)移动到另一个集合。具体来说,它会从源集合中移除该元素,并将该元素添加到目标集合中。这个操作是 原子性的,即要么成功完成,要么失败。

语法:

SMOVE source destination member
127.0.0.1:6379> sadd key a b c d e f
6
127.0.0.1:6379> smove key key1 a 
1
127.0.0.1:6379> smembers key1
a

返回值:

  • 1:如果元素成功移动到目标集合。
  • 0:如果元素不在源集合中,或者没有成功移动。

SREM

SREM 是一个用于从集合(set)中移除指定成员的命令。

语法:

SREM key member [member ...]
127.0.0.1:6379> sadd key a b c d e f
6
127.0.0.1:6379> smembers key
c
b
d
e
a
f
127.0.0.1:6379> srem key a b c d
4
127.0.0.1:6379> smembers key
e
f

返回值

  • 如果集合中存在该成员并成功删除,返回 1
  • 如果集合中不存在该成员,返回 0
  • 如果成员有多个,则会返回删除的成员数量。

集合间操作


交集(inter)、并集(union)、差集(diff)的概念如图

交集: 

SINTER

SINTER用于计算 多个集合的交集。它返回的是所有输入集合中都存在的元素。

语法:

SINTER key1 key2 [key3 ...]
​
127.0.0.1:6379> sadd key1 a b c d e f 
6
127.0.0.1:6379> sadd key2 a b c i j k
6
127.0.0.1:6379> sinter key1 key2
c
b
a

​

SINTERSTORE
语法:

SINTERSTORE destination key1 key2 [key3 ...]
127.0.0.1:6379> sinterstore key3 key1 key2
3
127.0.0.1:6379> smembers key3
a
c
b

返回值

  • 整数SINTERSTORE 返回一个整数,表示目标集合中包含的成员数量(即交集中的元素数)。

并集:

SUNION用于 计算多个集合的并集,即返回所有参与集合中的元素,去重后的结果。

语法:

SUNION key1 key2 [key3 ...]
127.0.0.1:6379> sadd key1 a b c d e f
6
127.0.0.1:6379> sadd key2 a b c i j k
6
127.0.0.1:6379> sunion key1 key2 
i
d
e
c
a
f
k
b
j

SUNIONSTORE

​​​​获取给定 set 的并集中的元素并保存到⽬标 set 中。

语法:

SUNIONSTORE destination key [key ...]
127.0.0.1:6379> sunionstore key3 key1 key2
9
127.0.0.1:6379> smembers key3
i
d
e
c
a
f
k
b
j

差集:

SDIFF用于计算 多个集合之间的差集。它返回的是在一个集合中存在但不在其他集合中存在的元素。简单来说,SDIFF 用于找出某些集合与其他集合的不同部分。

语法:

SDIFF key1 key2 [key3 ...]
127.0.0.1:6379> sadd key1 a b c d e f
6
127.0.0.1:6379> sadd key2 a b c i j k
6
127.0.0.1:6379> sdiff key1 key2
d
f
e
127.0.0.1:6379> sdiff key2 key1
i
j
k

返回值:

SDIFF 命令返回的是 所有集合的差集,即那些仅存在于第一个集合中的元素,其他集合中不存在的元素。

SDIFFSTORE

SDIFFSTORE 是一个用于计算多个集合(set)之间差集并将结果保存到另一个集合中的命令。它的功能是找出一个或多个集合与其他集合的差异,并将这个差异保存到指定的集合中。

语法:

SDIFFSTORE destination key1 key2 [keyN]
127.0.0.1:6379> sdiffstore key3 key1 key2
3
127.0.0.1:6379> smembers key3
d
f
e
127.0.0.1:6379> sdiffstore key4 key2 key1
3
127.0.0.1:6379> smembers key4
i
j
k

返回值

SDIFFSTORE 返回的是计算出的差集结果的元素数量,也就是目标集合中元素的个数。

 内部编码

集合类型的内部编码有两种:

  • intset(整数集合):当集合中的元素都是整数并且元素的个数⼩于 set-max-intset-entries 配置默认 512 个)时,Redis 会选⽤ intset 来作为集合的内部实现,从而减少内存的使用。
  • hashtable(哈希表):当集合类型无法满足 intset 的条件时,Redis 会使用 hashtable 作为集合的内部实现。

使用场景:

集合类型比较典型的使⽤场景是标签(tag)。例如 A 用户对娱乐、体育板块比较感兴趣,B 用户对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的人,以及用户的共同喜好的标签,这些数据对于增强还有体验和用户黏度都非常有帮助。


Zset 有序集合

在 Redis 中,Zset(有序集合)是一种基于哈希表和跳表(skip list)的数据结构,它将元素和对应的分数(score)关联在一起,按照分数进行排序。

Zset 的特点是:每个元素都有一个唯一的分数,并且所有的元素都能按照分数进行排序,分数相同的元素会按照字典顺序排序。Zset 既能高效地支持排名查询,又能提供快速的范围查询。 

Zset 的基本结构

  • 元素:每个元素是一个唯一的成员,可以是任意的字符串。
  • 分数:每个元素都关联一个浮动的分数,用于排序。分数是浮点数类型,可以是负数或者正数。

提醒: 

可查看中文

Zset基本命令

ZADD

ZADD 是向有序集合(ZSET)中添加一个或多个成员及其分数的命令。如果该成员已经存在,则更新其分数;如果不存在,则将成员添加到集合中。 

命令格式:

ZADD key [NX|XX] [CH] score member [score member ...]

说明

  • key: 有序集合的键(ZSET的名字)。
  • score: 分数值,用于排序,分数值可以是整数或浮动的数字。
  • member: 要添加的成员(元素)。
  • [NX|XX](可选):
    • NX: 只有在成员不存在时才添加。
    • XX: 只有在成员已经存在时才更新。
  • [CH](可选):
    • CH: 返回值包含被修改的成员个数,而不仅仅是新增的成员个数。
  • score member ...: 可以同时添加多个元素,每个元素都有一个分数。

返回值

  • 返回添加到ZSET的成员数量,不包括那些已经存在且分数未发生变化的成员。

  基本用法:

127.0.0.1:6379> zadd key1 90 英语 80 数学 50 语文
3
127.0.0.1:6379> zrange key1 0 -1 withscores
语文
50
数学
80
英语
90
127.0.0.1:6379> zadd key1 100 语文
0
127.0.0.1:6379> zrange key1 0 -1 withscores
数学
80
英语
90
语文
100

NX 和 XX 用法:

NX:只在成员不存在时才添加:

127.0.0.1:6379> zadd key1 nx 99 化学
1
127.0.0.1:6379> zrange key1 0 -1
数学
英语
化学
语文
127.0.0.1:6379> zadd key1 nx 90 化学
0
127.0.0.1:6379> zrange key1 0 -1 withscores
数学
80
英语
90
化学
99
语文
100

XX:只在成员已存在时才更新:

127.0.0.1:6379> zadd key1 xx 100 化学
0
127.0.0.1:6379> zrange key1 0 -1 withscores
数学
80
英语
90
化学
100
语文
100

使用 CH

默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。

127.0.0.1:6379> zadd key1 ch 40 物理 15 体育 60 化学
3
127.0.0.1:6379> zrange key1 0 -1 withscores
体育
15
物理
40
化学
60
数学
80
英语
90
语文
100

扩展命令:ZINCRBY

此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和分数

127.0.0.1:6379> zadd key1 incr 44 体育
59
127.0.0.1:6379> zrange key1 0 -1 withscores
物理
40
体育
59
化学
60
数学
80
英语
90
语文
100

ZCARD 

 ZCARD 命令返回指定有序集合中的成员数量。

语法:

ZCARD key
127.0.0.1:6379> zrange key1 0 -1 withscores
物理
40
体育
59
化学
60
数学
80
英语
90
语文
100
127.0.0.1:6379> zcard key1
6
127.0.0.1:6379> zcard key2
0

返回值:

  • 返回一个整数,表示有序集合中成员的个数。如果指定的 key 不存在,返回值为 0

ZCOUNT

 返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

语法:

ZCOUNT key min max
  • key:有序集合的名称(或键)。

  • min:查询的最小分数,可以是整数或浮动的数值。

  • max:查询的最大分数,也可以是整数或浮动的数值。

min 和 max 的范围表示:

  • 分数的范围可以使用特殊符号:

    • -inf 表示负无穷,表示没有下限。

    • +inf 表示正无穷,表示没有上限。

    • 可以使用 [ 和 ] 来表示区间的闭合或开区间:

      • [min,max] 表示闭区间,包含 min 和 max

      • (min,max) 表示开区间,不包含 min 和 max

      • [min,max) 表示左闭右开区间,包含 min 但不包含 max

      • (min,max] 表示左开右闭区间,不包含 min 但包含 max

返回值:

  • 返回 有序集合 中分数在指定区间内的成员数量。

 ZRANGE

 用来根据索引范围从有序集合中获取元素,返回的元素按其分数(score)从低到高排序。

语法:

ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange key1 0 -1
物理
体育
化学
数学
英语
语文
127.0.0.1:6379> zrange key1 0 -1 withscores
物理
40
体育
59
化学
60
数学
80
英语
90
语文
100

返回值:

  • 默认情况下,ZRANGE 会返回指定范围内的成员列表(按照分数从低到高排序)。

  • 如果指定了 WITHSCORES,则返回成员以及它们对应的分数。

ZREVRANGE

返回指定区间⾥的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。
语法:

ZREVRANGE key start stop [WITHSCORES]

127.0.0.1:6379> zrevrange key1 0 -1
语文
英语
数学
化学
体育
物理
127.0.0.1:6379> zrevrange key1 0 -1 withscores
语文
100
英语
90
数学
80
化学
60
体育
59
物理
40

返回值

  • 如果没有指定 WITHSCORES,返回的是有序集合中的成员(按分数降序排列)。
  • 如果指定了 WITHSCORES,返回的是成员和对应的分数对(每个成员后面跟着其分数)。

ZRANGEBYSCORE

 根据成员的分数范围返回有序集合中指定分数区间内的所有元素。这个命令非常适合用于需要按分数范围查询并获取排名的场景。

语法:

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrangebyscore key1 40 60
物理
体育
化学
127.0.0.1:6379> zrangebyscore key1 70 100 withscores
数学
80
英语
90
语文
100

返回值

  • 普通返回:返回在指定分数范围内的成员(仅包含成员,不包含分数)。
  • WITHSCORES 选项:返回的结果是一个列表,包含成员和它们对应的分数,格式为 [member, score, member, score, ...]
  • LIMIT 选项:限制返回的结果,从指定的偏移量 offset 开始,返回最多 count 个元素。

ZPOPMAX

ZPOPMAX删除并返回分数最⾼的 count 个元素。
语法:

ZPOPMAX key [count]
127.0.0.1:6379> zrange key1 0 -1 withscores
物理
40
体育
59
化学
60
数学
80
英语
90
语文
100
127.0.0.1:6379> zpopmax key1 1
语文
100
127.0.0.1:6379> zpopmax key1 2
英语
90
数学
80
127.0.0.1:6379> zpopmax key1
化学
60

返回值

  • 如果未指定 count,返回一个包含单个元素的列表,其中元素是一个由成员和分数组成的列表([member, score])。
  • 如果指定了 count,返回的列表将包含多个成员及其对应的分数,按分数降序排列。

BZPOPMAX

ZPOPMAX 的阻塞版本。
语法:

BZPOPMAX key [key ...] timeout

返回值:

  • 如果命令成功执行,返回一个包含两部分的数组:

    • key:从哪个有序集合弹出的元素。
    • member:弹出的元素的成员。
    • score:弹出的成员的分数。

ZPOPMIN

ZPOPMIN删除并返回分数最低的 count 个元素。

语法:

ZPOPMIN key [count]
127.0.0.1:6379> zadd key 100 Math 90 English 80 Sport
3
127.0.0.1:6379> zrange key 0 -1 withscores
Sport
80
English
90
Math
100
127.0.0.1:6379> zpopmin key 2
Sport
80
English
90

返回值:

  • 如果不指定 count,返回一个包含移除的成员及其分值的数组。
  • 如果指定了 count,则最多返回 count 个成员及其分值。

BZPOPMIN同理BZPOPMAX

ZRANK

返回指定元素的排名,升序。

语法:

ZRANK key member
127.0.0.1:6379> zadd key 15 张三 18 李四 19 王五 12 赵六
4
127.0.0.1:6379> zrange key 0 -1 withscores 
赵六
12
张三
15
李四
18
王五
19
127.0.0.1:6379> zrank key 张三
1
127.0.0.1:6379> zrank key 王五
3
127.0.0.1:6379> zrank key 赵六
0
127.0.0.1:6379> zrank key 小七

127.0.0.1:6379> 

返回值:

  • 整数:如果成员存在,返回该成员在有序集合中的排名(从 0 开始)。
  • nil:如果成员不存在于该有序集合中,返回 nil

ZREVRANK

ZREVRANK返回指定元素的排名,降序

语法:

ZREVRANK key member
127.0.0.1:6379> zrange key 0 -1 withscores
赵六
12
张三
15
李四
18
王五
19
127.0.0.1:6379> zrevrank key 赵六
3
127.0.0.1:6379> zrevrank key 王五
0
127.0.0.1:6379> zrevrank key 哈哈

返回值:

  • 整数:如果成员存在于有序集合中,返回该成员的反向排名(从 0 开始)。即成员的分数较高时,排名靠前,分数较低时排名靠后。
  • nil:如果成员不存在于该有序集合中,返回 nil

 ZSCORE

ZSCORE返回指定元素的分数
语法:

ZSCORE key member
127.0.0.1:6379> zrange key 0 -1 withscores
赵六
12
张三
15
李四
18
王五
19
127.0.0.1:6379> zscore key 张三
15
127.0.0.1:6379> zscore key 李四
18
127.0.0.1:6379> zscore key hh

返回值:

  • 浮动数值:如果成员存在,返回该成员的分数。
  • nil:如果成员不存在于有序集合中,返回 nil

ZREM

ZREM删除指定的元素。
语法:

ZREM key member [member ...]
127.0.0.1:6379> zrange key 0 -1 withscores
赵六
12
张三
15
李四
18
王五
19
127.0.0.1:6379> zrem key 张三 李四
2
127.0.0.1:6379> zrange key 0 -1
赵六
王五

返回值:

  • 整数:返回成功移除的成员数量。
    • 如果成员存在并成功移除,返回的数字是移除的成员数量。
    • 如果某个成员不存在,ZREM 仍然会忽略这个成员,不会报错,但不会计入移除的数量。

 ZREMRANGEBYRANK

按照排序,升序删除指定范围的元素,左闭右闭。

语法:

ZREMRANGEBYRANK key start stop
127.0.0.1:6379> zadd key 80 英语 50 语文 30 数学 28 体育 49 美术
5
127.0.0.1:6379> zrange key 0 -1
体育
数学
美术
语文
英语
127.0.0.1:6379> zremrangebyrank key 10 50 
0
127.0.0.1:6379> zremrangebyrank key 0 3
4
127.0.0.1:6379> zrange key 0 -1
英语

返回值:

  • 整数:返回被成功移除的成员数量。

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE按照分数删除指定范围的元素,左闭右闭。

语法:

ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zadd key 80 英语 50 语文 30 数学 28 体育 49 美术
5
127.0.0.1:6379> zremrangebyscore key 10 50
4
127.0.0.1:6379> zrange key 0 -1 withscores
英语
80

返回值:

  • 该命令返回一个整数,表示实际删除的元素数量。

 ZINCRBY

为指定的元素的关联分数添加指定的分数值。

语法:

ZINCRBY key increment member
127.0.0.1:6379> zincrby key 100 英语
180
127.0.0.1:6379> zscore key 英语
180

返回值:

ZINCRBY 命令返回的是 成员的更新后的分数。

集合间操作

ZINTERSTORE

求出给定有序集合中元素的交集并保存进目标有序集合中,在合并过程中以元素为单位进行合并,元素对应的分数按照不同的聚合方式和权重得到新的分数。

语法:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight
[weight ...]] [AGGREGATE <SUM | MIN | MAX>]

功能:

  • ZINTERSTORE 用于计算多个有序集合的交集,并将结果存储到目标有序集合中。交集是通过各个集合中成员的分数进行计算的,只有在所有参与的集合中都存在的成员才会被保留下来。
  • 该命令支持 加权(使用 WEIGHTS),可以让每个集合的分数对交集结果产生不同的影响。
  • 还支持 聚合方法(使用 AGGREGATE),可以选择使用 SUM(默认)MIN 或 MAX 作为聚合方式。
127.0.0.1:6379> zadd key1 140 英语 120 语文 110 数学 100 政治 90 历史
5
127.0.0.1:6379> zadd key2 120 英语 100 语文 140 数学 90 物理 100 化学
5
127.0.0.1:6379> zinterstore key3 2 key1 key2 
3
127.0.0.1:6379> zrange key3 0 -1 withscores
语文
220
数学
250
英语
260
127.0.0.1:6379> zinterstore key4 2 key1 key2 weights 2 2
3
127.0.0.1:6379> zrange key4 0 -1 withscores
语文
440
数学
500
英语
520
127.0.0.1:6379> zinterstore key5 2 key1 key2 aggregate max
3
127.0.0.1:6379> zrange key5 0 -1 withscores
语文
120
数学
140

返回值:

  • ZINTERSTORE 命令返回值是 目标集合中存储的成员数量。

 有序集合的并集操作

 ZUNIONSTORE


 求出给定有序集合中元素的并集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。

语法:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight
[weight ...]] [AGGREGATE <SUM | MIN | MAX>]
127.0.0.1:6379> zadd key1 140 英语 120 语文 110 数学 100 政治 90 历史 80 地理
6
127.0.0.1:6379> zadd key2 120 英语 100 语文 140 数学 90 物理 100 化学 90 生物
6
127.0.0.1:6379> zunionstore key3 2 key1 key2 
9
127.0.0.1:6379> zrange key3 0 -1 withscores
地理
80
历史
90
物理
90
生物
90
化学
100
政治
100
语文
220
数学
250
英语
260
127.0.0.1:6379> zunionstore key3 2 key1 key2 aggregate max
9
127.0.0.1:6379> zrange key3 0 -1 withscores
地理
80
历史
90
物理
90
生物
90
化学
100
政治
100
语文
120
数学
140
英语
140

返回值:目标集合中的元素个数
 

 

内部编码

有序集合类型的内部编码有两种:

• ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会用 ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使用。

• skiplist(跳表):当 ziplist 条件不满足时,有序集合会使用 skiplist 作为内部实现,因为此时ziplist 的操作效率会下降。

使用场景

有序集合比较典型的使用场景就是排行榜系统。例如常见的网站上的热榜信息,榜单的维度可能是多方面的:按照时间、按照阅读量、按照点赞量


列表、集合、有序集合三者的异同点
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP自定义权限对象

一、创建域和数据元素 SE11 二、创建权限字段 SU20 关联数据元素ZAPP 三、创建权限对象 SU21 关联权限字段ZAPP 四、新建程序&#xff0c;加入权限对象 SE38 在程序中增加以下块 AUTHORITY-CHECK OBJECT Z_BC_APP ID ZAPP FIELD 01. IF sy-subrc EQ 0. ENDIF. 五、…

linux0.11源码分析第二弹——setup.s内容

&#x1f680; 前言 继上篇博客分享了boot文件的内容后&#xff0c;本篇博客进而来到第二个文件&#xff1a; setup.s &#xff0c;对应了《linux源码趣读》的第5~8回。这部分的功能主要就是做了 三件事 &#xff0c;第一件事是做代码搬运和临时变量存放&#xff0c;第二件事是…

Halcon中histo_2dim(Operator)算子原理及应用详解

在Halcon中&#xff0c;histo_2dim算子是一个用于计算双通道灰度值图像的直方图的工具。以下是对该算子的原理及应用的详细解释&#xff1a; 一、原理 histo_2dim算子的函数原型为&#xff1a;histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )。 输入参数&#xff…

(vue)el-table在表头添加筛选功能

(vue)el-table在表头添加筛选功能 筛选前&#xff1a; 选择条件&#xff1a; 筛选后&#xff1a; 返回数据格式: 代码: <el-tableref"filterTable":data"projectData.list"height"540":header-cell-style"{border-bottom: 1px soli…

使用 Marp 将 Markdown 导出为 PPT 后不可编辑的原因说明及解决方案

Marp 是一个流行的 Markdown 演示文稿工具&#xff0c;能够将 Markdown 文件转换为 PPTX 格式。然而&#xff0c;用户在使用 Marp 导出 PPT 时&#xff0c;可能会遇到以下问题&#xff1a; 导出 PPT 不可直接编辑的原因 根据 Marp GitHub 讨论&#xff0c;Marp 导出的 PPTX 文…

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

Gin- Cookie\Session相关

Cookie&#xff0c;Session是什么&#xff1f; Cookie直译小饼干&#xff0c;是一些数据信息&#xff0c;类似于小型文本文件&#xff0c;存储在浏览器上。Cookie是进行第一次登录之后&#xff0c;由服务器创建后返回给浏览器的。之后&#xff0c;每当浏览器再次向同一服务器发…

使用Python打造高效的PDF文件管理应用(合并以及分割)

在日常工作和学习中&#xff0c;我们经常需要处理大量PDF文件。手动合并、分割PDF不仅耗时&#xff0c;还容易出错。今天&#xff0c;我们将使用Python的wxPython和PyMuPDF库&#xff0c;开发一个强大且易用的PDF文件管理工具。 C:\pythoncode\new\mergeAndsplitPdf.py 所有代…

深度学习中自适应学习率调度器

传统观点认为&#xff0c;太大的学习率不利于优化深度神经网络&#xff0c;而相比固定的学习率而言&#xff0c;变化的学习率更能提供快速的收敛。基于此&#xff0c;本文作者基于理论基础提出了一个计算深度神经网络学习率的新方法。实验结果证明了该方法的有效性。 训练神经…

文献研读|基于像素语义层面图像重建的AI生成图像检测

前言&#xff1a;本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍&#xff0c;分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade&#xff0c;以及基于语义层面重建的检测方法 SimGIR 和 Zerofake&#xff1b;并对相应方法进行比较。 相关文章&#xff1a;论…

ElasticSearch06-分片节点分配

零、文章目录 ElasticSearch06-分片节点分配 1、单节点多分片多副本 &#xff08;1&#xff09;启动一个空节点 节点的配置如下 cluster.name: mycluster node.name: node-01 node.master: true node.data: true network.host: 127.0.0.1 http.port: 9201 transport.tcp.p…

信息学奥赛一本通 1438:灯泡 | 洛谷 P5931 [清华集训2015] 灯泡

【题目链接】 ybt 1438&#xff1a;灯泡 洛谷 P5931 [清华集训2015] 灯泡 【题目考点】 1. 三分 求函数极值 2. 相似三角形 3. 对钩函数 【解题思路】 首先考虑影子还没有到达对面墙壁的情况 记BM长度为x&#xff0c;影子为AM&#xff0c;长度为L。三角形ABC相似于三角…

揭开 Choerodon UI 拖拽功能的神秘面纱

01 引言 系统的交互方式主要由点击、选择等组成。为了提升 HZERO 系统的用户体验、减少部分操作步骤&#xff0c;组件库集成了卓越的拖拽功能&#xff0c;让用户可以更高效流畅的操作系统。 例如&#xff1a;表格支持多行拖拽排序、跨表数据调整、个性化调整列顺序&#xff1…

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说&#xff0c;继电器提供了控制器和设备之间的隔离&#xff0c;因为设备可以在AC和DC上工作。但是&#xff0c;他们从微控制器接收信号&#xff0c;因此…

fpga系列 HDL:Quartus II 时序约束 静态时序分析 (STA) test.out.sdc的文件结构

test.out.sdc的文件结构 ## Generated SDC file "test.out.sdc"## Copyright (C) 1991-2013 Altera Corporation ## Your use of Altera Corporations design tools, logic functions ## and other software and tools, and its AMPP partner logic ## functions,…

Windows安全中心(病毒和威胁防护)的注册

文章目录 Windows安全中心&#xff08;病毒和威胁防护&#xff09;的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心&#xff08;病毒和威胁防护&#xff09;的注册 本文我们来分析一下Windows安全中心&#xff08;Windows Security Center…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用&#xff0c;可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时&#xff0c;Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

ARM嵌入式学习--第八天(PWM)

PWM -PWM介绍 PWM&#xff08;pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量&#xff0c;通信&#xff0c;工控等方面 PWM的频率 是指在1秒钟内&#xff0c;信号从…

TongESB7.1.0.0安装参考指引+测试参考(by lqw)

文章目录 安装安装准备配置jdk安装管理中心&#xff08;manager&#xff09;安装运行时(server)安装mysql并配置manager&#xff08;新装阶段考虑&#xff09;放入授权启动内置redis启动内置redis启动manager和server停止manager和server访问控制台如何在控制台上重置密码 测试…

【现代C++开发】使用现代的C++快速开发一款串口读写软件

文章目录 前言一、必要条件二、实现步骤1.创建项目2.配置代码提示3.安装依赖3.编译程序4. 编写实现代码 前言 最近关于C闹出来的动静态势挺大的&#xff0c;主要是由于爱美丽卡开始抵制C&#xff0c;最近有不少文章都报道了这件事&#xff0c;比如 即使C到了这个时候&#xf…