当前位置: 首页 > news >正文

Redis 有序集合操作实战(全)

目录

ZADD 加入有序集

ZCARD 取成员数量

ZCOUNT 计算区间成员数量

ZINCRBY 运算

ZRANGE 取区间成员(升序)

ZRANGEBYSCORE 按分值排序取成员

ZRANK 取成员排名

ZREM 移除成员

ZREMRANGEBYRANK 按位置区间批量移除

ZREMRANGEBYSCORE 按分值区间移除

ZREVRANGE 取区间成员(降序)

ZREVRANGEBYSCORE 取分值成员(逆序)

ZREVRANK 取成员提名(降序)

ZSCORE 取成员的分值

ZUNIONSTORE 合并多个有序集

ZINTERSTORE 多个集合取成员交集

ZSCAN 迭代


ZADD 加入有序集

语法:ZADD key score member [[score member] [score member] ...]。

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

  • 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
  • score 值可以是整数值或双精度浮点数。
  • 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
  • 当 key 存在但不是有序集类型时,返回一个错误。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd z1 8 a 1 b 5 c    # 对一个不存在的key操作
(integer) 3
127.0.0.1:6379> zadd z1 2 b            # 添加已存在的元素
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zadd name 1 a          # 对非有序集key操作,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂订O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。

返回值:

  • 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
  • 对非有序集key执行zadd命令,报错。

ZCARD 取成员数量

语法:ZCARD key。

返回有序集 key 的基数。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd z1 8 a 1 b 5 c
(integer) 3
127.0.0.1:6379> zcard z1    # 对非空有序集执行zcard命令
(integer) 3
127.0.0.1:6379> zcard z2    # 对不存在key执行zcard命令
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zcard name  # 对非有序集执行zcard命令
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • 当 key 存在且是有序集类型时,返回有序集的基数。
  • 当 key 不存在时,返回 0 。
  • 当 key 不是有序集时,报错。

ZCOUNT 计算区间成员数量

语法:ZCOUNT key min max。

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

  • 参数 min 和 max 的详细使用方法,请参考 ZRANGEBYSCORE 命令。
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zrange s1 0 -1
(empty array)
127.0.0.1:6379[9]> zadd s1 2500 name1
(integer) 1
127.0.0.1:6379[9]> zadd s1 3000 name2
(integer) 1
127.0.0.1:6379[9]> zadd s1 5000 name3
(integer) 1
127.0.0.1:6379[9]> zrange s1 0 -1
1) "name1"
2) "name2"
3) "name3"
127.0.0.1:6379[9]> zcount s1 4000 5000 # 计算分数在4000-5000之间的元素
(integer) 1

时间复杂度O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。

返回值:

  • score 值在 min 和 max 之间的成员的数量。
  • key不是有序集,报错。

ZINCRBY 运算

语法:ZINCRBY key increment member。

为有序集 key 的成员 member 的 score 值加上增量 increment 。

  • increment 为正值为增加(score 可以是整数值或双精度浮点数)。
  • increment 为负值为减(score 可以是整数值或双精度浮点数)。
  • key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。
  • 当 key 不是有序集类型时,返回一个错误。
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zadd s1 1000 name
(integer) 1
127.0.0.1:6379[9]> zscore s1 name
"1000"
127.0.0.1:6379[9]> zincrby s1 100 name
"1100"
127.0.0.1:6379> set s3 100
OK
127.0.0.1:6379> zincrby s3 1 name
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度为O(log(N))。

返回值:

  • member 成员的新 score 值,以字符串形式表示。
  • key不是有序集,报错。

ZRANGE 取区间成员(升序)

语法:ZRANGE key start stop [WITHSCORES]。

返回有序集 key 中,指定区间内的成员。

  • 其中成员的位置按 score 值递增(从小到大)来排序(递减用 ZREVRANGE 命令)。
  • 具有相同 score 值的成员按字典序来排列。
  • start和stop:0开始表示第一个成员,1表示第二个成员,以此类推。
  • start和stop:-1开始表示最后一个成员,-2表示倒数第二个成员,以此类推。
  • start大于stop或者start大于成员数量:返回空列表。
  • WITHSCORES选项:将有序集成员及其分值一起返回。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 100 member1
(integer) 1
127.0.0.1:6379> zadd s1 200 member2
(integer) 1
127.0.0.1:6379> zrange s1 0 1    # 显示敬意0到1的成员
1) "member1"
2) "member2"
127.0.0.1:6379> zrange s1 0 5    # stop 下标超出最大下标时的情况
1) "member1"
2) "member2"
127.0.0.1:6379> zrange s1 -1 -1  # 负数情况
1) "member2"
127.0.0.1:6379> zrange s1 2 1    # start 大于 end 情况 
(empty array)
127.0.0.1:6379> zrange s1 4 5    # start 大于 成员数量情况
(empty array)
127.0.0.1:6379> zrange s1 0 1 withscores # 添加withscores 选项情况
1) "member1"
2) "100"
3) "member2"
4) "200"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zrange name 0 1  # 对非有序集合执行zrange命令情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

返回值:

  • 指定区间内,带有 score 值(可选)的有序集成员的列表。
  • 对非有序集合key操作报错。

ZRANGEBYSCORE 按分值排序取成员

语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]。

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

  • 具有相同 score 值的成员按字典序来排列。
  • 可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。
  • 可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。
  • 默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间(小于或大于)。
  • min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。
  • min大于max 或 min大于集合成员最大分时,返回空列表
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zadd s1 2500 name1
(integer) 1
127.0.0.1:6379[9]> zadd s1 5000 name2
(integer) 1
127.0.0.1:6379[9]> zadd s1 12000 name3    # 初始化有序集合
(integer) 1
127.0.0.1:6379[9]> zrangebyscore s1 -inf +inf
1) "name1"
2) "name2"
3) "name3"
127.0.0.1:6379[9]> zrangebyscore s1 -inf +inf withscores
1) "name1"
2) "2500"
3) "name2"
4) "5000"
5) "name3"
6) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 -inf 3000 withscores
1) "name1"
2) "2500"
127.0.0.1:6379[9]> zrangebyscore s1 5000 +inf withscores
1) "name2"
2) "5000"
3) "name3"
4) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf withscores
1) "name3"
2) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf
1) "name3"
127.0.0.1:6379[9]> ZRANGEBYSCORE s1 (8000 400000
1) "name3"

时间复杂度O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。

返回值:

  • 指定区间内,带有 score 值(可选)的有序集成员的列表。
  • key不是有序集,报错。

ZRANK 取成员排名

语法:ZRANK key member。

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

  • 排名以 0 为底,也就是说, score 值最小的成员排名为 0 。
  • 如果想按分值递减排列,用 ZREVRANK 命令。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 5 member1
(integer) 1
127.0.0.1:6379> zadd s1 3 member2
(integer) 1
127.0.0.1:6379> zadd s1 8 member3
(integer) 1
127.0.0.1:6379> zrank s1 member1  # 对有序集执行zrank情况
(integer) 1
127.0.0.1:6379> set s2 cxian
OK
127.0.0.1:6379> zrank s3 member1  # 对不存在key情况
(nil)
127.0.0.1:6379> set s3 beijing    # 初始化非有序集合
OK
127.0.0.1:6379> zrank s3 bj       # 对非有序集合情况  
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(log(N))。

返回值:

  • 如果 member 是有序集 key 的成员,返回 member 的排名。
  • 如果 member 不是有序集 key 的成员 或 key 不存在,返回 nil 。
  • 如果key不是有序集,报错

ZREM 移除成员

语法:ZREM key member [member ...]。

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

  • 当 key 存在但不是有序集类型时,返回一个错误。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 5 member1
(integer) 1
127.0.0.1:6379> zadd s1 3 member2
(integer) 1
127.0.0.1:6379> zadd s1 8 member3  # 初始化有序集
(integer) 1
127.0.0.1:6379> zrem s1 member1 member2    # 成员存在情况
(integer) 2
127.0.0.1:6379> zrem s1 member5    # 成员不存在情况
(integer) 0
127.0.0.1:6379> zrem s2 member5    # key不是有序集情况,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。

返回值:

  • 被成功移除的成员的数量,不包括被忽略的成员。
  • 成员不存在,返回 0。
  • key不是有序集,报错。

ZREMRANGEBYRANK 按位置区间批量移除

语法:ZREMRANGEBYRANK key start stop。

移除有序集 key 中,指定排名(rank)区间内的所有成员。

  • 区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。
  • 参数 start 和 stop:以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
  • 你参数 start 和 stop:以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set s1 1 member1
(error) ERR syntax error
127.0.0.1:6379> zadd s1 1 member1
(integer) 1
127.0.0.1:6379> zadd s1 4 member2
(integer) 1
127.0.0.1:6379> zadd s1 3 member3    # 初始化有序集
(integer) 1
127.0.0.1:6379> zremrangebyrank s1 1 1  # 有序集
(integer) 1
127.0.0.1:6379> zrange s1 0 -1        # 序出所有
1) "member1"
2) "member2"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zremrangebyrank name 1 1     # 非有序集key,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。

返回值:

  • 被移除成员的数量。
  • key不是有序集,报错。

ZREMRANGEBYSCORE 按分值区间移除

语法:ZREMRANGEBYSCORE key min max。

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

  • 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
  • score 值等于 min 或 max 的成员也可以不包括在内,详情请参见 ZRANGEBYSCORE 命令。
127.0.0.1:6379> zrange grade 0 -1 withscores    # 查看成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "windows"
6) "68"
7) "unix"
8) "71"
127.0.0.1:6379> zremrangebyscore grade 66 90    # 移除大于等于66 小于等于99 的成员
(integer) 2
127.0.0.1:6379> zrange grade 0 -1 withscores    # 查看成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"

时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。

返回值:

  • 被移除成员的数量。
  • key不是有序集,报错。

ZREVRANGE 取区间成员(降序)

语法:ZREVRANGE key start stop [WITHSCORES]。

返回有序集 key 中,指定区间内的成员。

  • 与ZRNANGE操作相似(详上翻见 ZRNANGE 命令)。
  • 不同点:ZREVRANGE 成员的位置按 score 值递减(从大到小)来排列。
127.0.0.1:6379> zadd grade 65 lining
(integer) 1
127.0.0.1:6379> zadd grade 64 verctor
(integer) 1
127.0.0.1:6379> zadd grade 71 unix    # 初始化集合
(integer) 1
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrevrange grade 0 -1 withscores # 执行zrevrange命令情况
1) "unix"
2) "71"
3) "lining"
4) "65"
5) "verctor"
6) "64"
127.0.0.1:6379> zrevrange name 0 -1 # 非有序集key执行zrevrange命令情况报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

返回值:

  • 指定区间内,带有 score 值(可选)的有序集成员的列表。
  • 对非有序集合key操作报错。

ZREVRANGEBYSCORE 取分值成员(逆序)

语法:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]。

返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

  • 与ZRNANGEBYSCORE操作相似(详上翻见 ZRANGEBYSCORE 命令)。
  • 不同点:ZREVRANGEBYSCORE 成员的位置按 score 值递减(从大到小)来排列。
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集合信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrevrangebyscore grade 90 60 withscores # 执行zrevrangebyscore命令
1) "unix"
2) "71"
3) "lining"
4) "65"
5) "verctor"
6) "64"

时间复杂度O(log(N)+M), N 为有序集的基数, M 为结果集的基数。

返回值:

  • 指定区间内,带有 score 值(可选)的有序集成员的列表。
  • 对非有序集合key操作报错。

ZREVRANK 取成员提名(降序)

语法:ZREVRANK key member。

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

  • 排名以 0 为底,也就是说, score 值最大的成员排名为 0 。
  • 使用 ZRANK 命令可以获得成员按 score 值递增(从小到大)排列的排名
127.0.0.1:6379> zrange grade 0 -1        # 查看集合信息
1) "verctor"
2) "lining"
3) "unix"
127.0.0.1:6379> zrevrank grade lining    # 取lining的排名
(integer) 1
127.0.0.1:6379> zrevrank grade baidu     # 成员不存在
(nil)
127.0.0.1:6379> get grade1
(nil)
127.0.0.1:6379> zrevrank grade1 baidu    # key不存在
(nil)
127.0.0.1:6379> zrevrank name baidu      # key存在且不为有序集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(log(N))。

返回值:

  • 如果 member 是有序集 key 的成员,返回 member 的排名。
  • 如果 member 不是有序集 key 的成员 或 key 不存在,返回 nil 。
  • key不是有序集,报错

ZSCORE 取成员的分值

语法:ZSCORE key member。

返回有序集 key 中,成员 member 的 score 值。

  • 如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
127.0.0.1:6379> zrange grade 0 -1
1) "verctor"
2) "lining"
3) "unix"
127.0.0.1:6379> zscore grade lining     # 取存在成员的情况
"65"
127.0.0.1:6379> zscore grade lining2    # 取不存在成员的情况
(nil)
127.0.0.1:6379> zscore grade2 lining2   # 取不存在key不存在成员的情况
(nil)
127.0.0.1:6379> set grade3 beijing
OK
127.0.0.1:6379> zscore grade3 lining2   # 取存在key不为有序集全情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • member 成员的 score 值,以字符串形式表示。
  • 返回nil:key不存在或成员不存在。
  • 报错:key存在但不是有序集合。

ZUNIONSTORE 合并多个有序集

语法:ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]。

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

  • 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和。
  • 选项 WEIGHTS:指给定有序集成员指定一个乘法因子,返回时指定的有序集成员的分值均乘以乘法因子。
  • 没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。
  • 选项 AGGREGATE:两个以上有序集合有相同成员,以SUM|MIN|MAX 来取值,默认为SUM(SUM:分值相加;MIN:取最小的;MAX:取最大的)。
  • 不存在的key似为空集合
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrange grade2 0 -1 withscores # 查看有序集成员信息
1) "ll"
2) "30"
3) "un"
4) "35"
5) "vc"
6) "50"
127.0.0.1:6379> zunionstore dest 2 grade grade2 weights 2 2  # 执行zunionstore
(integer) 6
127.0.0.1:6379> zrange dest 0 -1 withscores # 查看 dest 信息1) "ll"2) "60"    # 分值已乘以2(原数据是30)3) "un"4) "70"    # 分值已乘以2(原数据是35)5) "vc"6) "100"   # 分值已乘以2(原数据是50)7) "verctor"8) "128"9) "lining"
10) "130"
11) "unix"
12) "142"
127.0.0.1:6379> del grade3
(integer) 1
127.0.0.1:6379> zunionstore dest 3 grade grade2 grade3    # 不存在key情况
(integer) 6
127.0.0.1:6379> zadd grade 12 ll                          # 在grade中添加和grade2相同的成员
(integer) 1
127.0.0.1:6379> zscore dest ll                            # 查看dest的成员ll的分值
"42"
127.0.0.1:6379> set grade3 beiging
OK
127.0.0.1:6379> zunionstore dest 3 grade grade2 grade3    # key不是有序集合情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数。

返回值:

  • 保存到 destination 的结果集的成员数量。
  • key不为有序集,报错。

ZINTERSTORE 多个集合取成员交集

语法:ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]。

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

  • 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和。
  • WEIGHTS 和 AGGREGATE 选项的描述,参见 ZUNIONSTORE 命令。
  • key不存在似为空有序集。
127.0.0.1:6379> zinterstore dest 2 grade grade2    # 取两集合交集情况
(integer) 1
127.0.0.1:6379> zrange dest 0 -1                   # 查看交集成员信息
1) "ll"
127.0.0.1:6379> del grade3
(integer) 1
127.0.0.1:6379> zinterstore dest 3 grade grade2 grade3    # 有不存在的key情况
(integer) 0
127.0.0.1:6379> lpush grade3 1
(integer) 1
127.0.0.1:6379> zinterstore dest 3 grade grade2 grade3    # 不为有序集合的key情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N*K)+O(M*log(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数。

返回值:

  • 保存到 destination 的结果集的成员数量。
  • key不为有序集合,报错。


ZSCAN 迭代

语法:ZSCAN key cursor [MATCH pattern] [COUNT count]。

  • 详见SCAN命令操作实战。

相关文章:

Redis 有序集合操作实战(全)

目录 ZADD 加入有序集 ZCARD 取成员数量 ZCOUNT 计算区间成员数量 ZINCRBY 运算 ZRANGE 取区间成员(升序) ZRANGEBYSCORE 按分值排序取成员 ZRANK 取成员排名 ZREM 移除成员 ZREMRANGEBYRANK 按位置区间批量移除 ZREMRANGEBYSCORE 按分值区间移除 ZREVRANGE 取区间成…...

化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设

化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设 化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设 目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。 随着计算机网络应用的不断涌现,计算机的时间同步问…...

计算机网络工程师多选题系列——操作系统

得多选者得天下啊同志们! 摘录按照章节顺序,但事实上各章节习题有交叉。 1 操作系统 1.1 操作系统概论 操作系统的主要功能:进程管理、存储管理、文件管理、设备管理和用户接口。 操作系统的主要功能——设备管理:为用户程序提…...

matlab读写json文件

Background 通常,在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型,包括数字、矩阵、向量、结构体、字符和函数等。但是,当和其他语言有交互时,mat文件会不太方便…...

数据治理-数据仓库环境

数据仓库环境包括一系列组织起来以满足企业需求的架构组件,从源系统流动到数据暂存区,数据可以在这里被清晰,当数据集成并存储在数据仓库或操作数据存储中时,可以对其进行补充丰富。在数据仓库中,可以通过数据集市或数…...

DevOps与CI/CD常见面试问题汇总

01 您能告诉我们DevOps和Agile(敏捷)之间的根本区别吗? 答:尽管DevOps与敏捷方法(这是最流行的SDLC[Software Development Life Cycle]方法之一)有一些相似之处,但两者在软件开发方面都是根本不同的方法。以下是两者之…...

OJ练习第178题——收集树中金币

收集树中金币 力扣链接:2603. 收集树中金币 题目描述 给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给…...

uni-app打包iOS ipa文件后不上架App store为用户提供下载解决过程记录

写在前面,itms-services协议是什么 itms-services协议是苹果提供的一种让iOS应用在用户设备上无线安装或升级的协议。 具体来说: itms-services表示iOS应用无线安装服务的URL方案,格式为:itms-services://?actiondownload-manifest&urlMANIFEST_URL其中MANIF…...

MySQL学习系列(2)-每天学习10个知识

目录 1. INNER JOIN 和 ON 子句2. 死锁3. SELECT * 和 SELECT column1, column24. 数据库的视图5. MySQL的触发器类型6. MySQL表的备份和恢复7. MySQL存储引擎8. 索引优化9. MySQL中的子查询10. 使用连接(JOIN)从多个表中检索数据 👍 点赞&am…...

黑马JVM总结(十四)

(1)分代回收_1 Java虚拟机都是结合前面几种算法,让他们协同工作,具体实现是虚拟机里面一个叫做分代的垃圾回收机制,把我们堆内存大的区域划分为两块新生代、老年代 新生代有划分为伊甸园、幸存区Form、幸存区To 为什…...

vue项目升级webpack

vue项目升级webpack 目录 1. vue项目中影响webpack版本的是什么 2.理解package.json中库前缀^和~区别 3.升级webpack4到5操作 1. vue项目中影响webpack版本的是什么 答案是:vue/cli-service版本 2.理解package.json中库前缀^和~区别 x.y.z x代表大版本&#xf…...

ubuntu的root用户修改密码失败

解决如下: 查看文件属性是否有a或i lsattr /etc/group /etc/passwd /etc/shadow 移除a和i的属性权限 chattr -ai /etc/group /etc/passwd /etc/shadow 再次使用passwd进行修改密码,就成功了...

C++---链表

1、链表 1.1、链表的结构 每个链表开头都有一个头指针Head尾节点的指针域为NULL,用于判断此列表是否结束 如果一个链表开始就为NULL,那么该链表为空链表 链表中的先后不代表在真实内存中的位置,只是单纯的逻辑上关系 1.2、创建链表 我们首…...

Unity使用Mirror制作局域网的同步

1.脚本布置.参考tank那个demo制作 1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud. 2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的脚本 3.新建Player的预制体,挂载NetworkIdentity,Ne…...

算法 N皇后问题-(递归回溯)

牛客网 BM59. 解题思路: 行列、斜叉不在一条直线上。 命令行为 row, 列为col, row 从0开始递归直到最后一行,列从0开始遍历,直到最后一列,中间每一步记录或清除位置状态,状态分为 m1[col] 1, m2[row-col] 1, m3[r…...

个人博客搭建记录

个人博客地址:www.jiasun.top 使用github pagehexo搭建,主题为fluid,搭建步骤参照:Github hexo 实现自己的个人博客、配置主题(超详细) 主题:https://hexo.fluid-dev.com/ 搭建时的问题&…...

下载vscode 更新

将下载地址的主地址加入一下镜像网址 http://vscode.cdn.azure.cn下面是访问页面 http://vscode.cdn.azure.cn/stable/abd2f3db4bdb28f9e95536dfa84d8479f1eb312d/VSCodeUserSetup-x64-1.82.2.exe...

std::async简单使用

std::async介绍并使用 std::async是C11引入的一个用于异步执行函数或函数对象的工具。它可以用于并行地执行函数&#xff0c;并在需要时获取函数的返回值。下面是一个简单的示例&#xff0c;演示了如何使用std::async&#xff1a; #include <iostream> #include <fu…...

【编程实践】在VS studio中配置Eigen库

1 介绍 Eigen库是C标准模板库&#xff0c;能够进行向量运算、矩阵运算、矢量运算、数值分析等操作&#xff0c;并且包含相应的运算算法。 Eigen官方地址: 地址 可在官网下载指定版本的压缩包&#xff0c;将压缩包解压至后面配置的“附件包含目录”中。 2 配置 2.1 VS studi…...

SQLite 3.43 发布,性能大提升!

前言 SQLite是一种被广泛运用的嵌入式关系型数据库管理系统&#xff0c;最新发布的SQLite 3.43版本带来了一个重要的改进&#xff0c;大幅提升了对JSON数据的处理性能&#xff0c;达到了之前的两倍。 主要更新 添加对 Contentless-Delete FTS5 索引的支持。这是 FTS5 全文搜索…...

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…...

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一 灰度发布铺垫 ① init_by_lua* init_by_lua init_by_lua_block 特点: 在openresty start、reload、restart时执行,属于master init 阶段机制&#xff1a; nginx master 主进程加载配置文件时&#xff0c;运行全局Lua VM级别上的参数指定的Lua代码场景&#xff1a; …...

Docker注入环境变量且设置多个环境变量

方式一 运行docker命令修改 在运行docker时&#xff0c;直接使用-e或–env&#xff0c;输入需要改变的变量 例如&#xff1a;springboot配置文件如下,可注入环境变量启动端口SERVER_PORT&#xff0c;以及启动配置文件NODE_ENV:dev server:port: ${SERVER_PORT:8400} spring…...

代码随想录二刷Day 15

102. Binary Tree Level Order Traversal vector<int>() it is basically constructor of std::vector class and will create a new empty vector. You can also mention the size of required vector in brackets. 访问二维vector的元素: 如果指定外层和内层向量的大…...

Node.js环境安装与服务设置,结合内网穿透随时随地公网访问!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

八、数据类型转换

数据类型转换 1.数据类型转换1.1.隐式类型转换1.2.显式类型转换1.3.训练11.4.训练2 —————————————————————————————————————————————————— 1.数据类型转换 类型转换是将一个值从一种类型更改为另一种类型的过程。例如&…...

2023数学建模研赛华为杯E题思路-出血性脑卒中临床智能诊疗建模

E 题 出血性脑卒中临床智能诊疗建模 三、请建模回答如下问题 1血肿扩张风险相关因素探索建模。 a)请根据“表1”&#xff08;字段&#xff1a;入院首次影像检查流水号&#xff0c;发病到首次影像检查时间间隔&#xff09;&#xff0c;“表2”&#xff08;字段&#xff1a;各时…...

Windows Server 2012 R2系统远程桌面的数字证书算法SHA1升级到SHA256

问题描述&#xff1a; 最近项目进行密评的时候&#xff0c;Windows Server 2012 R2发现了以下证书问题&#xff1a; Windows Server 2012 R2系统远程桌面的TLS 1.2协议使用SHA1算法数字证书&#xff0c;且证书有效日期截止23年10月&#xff0c;建议注意证书到期时间&#xff…...

windows进程管理相关命令

windows进程管理相关命令 根据进程名找到进程 例如python进程 PS C:\Users\27467> tasklist | findstr python python.exe 7088 Console 2 3,364 K python.exe 1580 Console 2 41,…...

Flutter快速入门学习(一)

目录 前言 新建项目 项目入口 Dart的入口&#xff08;项目的入口&#xff09; 布局 视图组件 Container&#xff08;容器&#xff09; Text&#xff08;文本&#xff09; Image&#xff08;图片&#xff09; Row&#xff08;水平布局&#xff09;和Column&#xff08…...

免费的建手机网站/竞价账户

题目 力扣 思路 n-1个元素加一等效于一个元素减一&#xff0c;计算所有元素与最小值的差的和就可以~ 代码 class Solution { public:int minMoves(vector<int>& nums) {int minn*min_element(nums.begin(),nums.end());int ret0;for(int num:nums){retnum-minn;…...

JAVA做论坛网站的源代码/百度竞价排名案例分析

NIPS 2000 经典论文翻译。 摘要 非负矩阵分解&#xff08;NMF&#xff09;是一种可以有效处理多变量数据的方法。本文介绍、分析了两种不同的 NMF 算法&#xff0c;这两种算法仅在更新规则&#xff08;update rule&#xff09;中使用的乘性因子&#xff08;multiplicative fact…...

神马站长平台/域名查询网站信息

1.创建一个 test_web 项目&#xff0c;和一个 名称为 test_app 的应用,命令如下&#xff1a; (1)django-admin startproject test_web (2)cd test_web(3)python manage.py startapp test_app打开项目目录&#xff1a;test_web 就会看到以下目录文件&#xff1a;2.在项目test_we…...

asp网站如何改首页布局视频教程/重庆森林粤语完整版在线观看免费

一、Sprint介绍 任务进度&#xff1a; 二、Sprint周期 看板&#xff1a; 燃尽图&#xff1a; 转载于:https://www.cnblogs.com/codinggarfield/p/6160534.html...

北京公司网站制作/合肥seo外包平台

Spring MVC 学习笔记10 —— 实现简单的用户管理&#xff08;4.3&#xff09;用户登录显示全局异常信息 </pre>Spring MVC 学习笔记10 —— 实现简单的用户管理&#xff08;4.3&#xff09;用户登录--显示全局异常信息<p></p><p></p><h3 styl…...

iis网站跳转/百度seo自动优化

在 Java 中&#xff0c;可以在另一个类中声明一个类&#xff0c;这称为嵌套类。嵌套类的可见性和范围受声明它的类的限制。 嵌套类的类型 嵌套类可以声明为静态或非静态。当我们将 static 修饰符应用于嵌套类时&#xff0c;它被称为静态嵌套类; 否则&#xff0c;它是非静态的。…...