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

目录

[ZADD 加入有序集](#ZADD 加入有序集)

[ZCARD 取成员数量](#ZCARD 取成员数量)

[ZCOUNT 计算区间成员数量](#ZCOUNT 计算区间成员数量)

[ZINCRBY 运算](#ZINCRBY 运算)

[ZRANGE 取区间成员(升序)](#ZRANGE 取区间成员(升序))

[ZRANGEBYSCORE 按分值排序取成员](#ZRANGEBYSCORE 按分值排序取成员)

[ZRANK 取成员排名](#ZRANK 取成员排名)

[ZREM 移除成员](#ZREM 移除成员)

[ZREMRANGEBYRANK 按位置区间批量移除](#ZREMRANGEBYRANK 按位置区间批量移除)

[ZREMRANGEBYSCORE 按分值区间移除](#ZREMRANGEBYSCORE 按分值区间移除)

[ZREVRANGE 取区间成员(降序)](#ZREVRANGE 取区间成员(降序))

[ZREVRANGEBYSCORE 取分值成员(逆序)](#ZREVRANGEBYSCORE 取分值成员(逆序))

[ZREVRANK 取成员提名(降序)](#ZREVRANK 取成员提名(降序))

[ZSCORE 取成员的分值](#ZSCORE 取成员的分值)

[ZUNIONSTORE 合并多个有序集](#ZUNIONSTORE 合并多个有序集)

[ZINTERSTORE 多个集合取成员交集](#ZINTERSTORE 多个集合取成员交集)

[ZSCAN 迭代](#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 下标超出最大下标时的情况
    3. "member1"
    4. "member2"
      127.0.0.1:6379> zrange s1 -1 -1 # 负数情况
    5. "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 选项情况
    6. "member1"
    7. "100"
    8. "member2"
    9. "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
    4. "name1"
    5. "2500"
    6. "name2"
    7. "5000"
    8. "name3"
    9. "12000"
      127.0.0.1:6379[9]> zrangebyscore s1 -inf 3000 withscores
    10. "name1"
    11. "2500"
      127.0.0.1:6379[9]> zrangebyscore s1 5000 +inf withscores
    12. "name2"
    13. "5000"
    14. "name3"
    15. "12000"
      127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf withscores
    16. "name3"
    17. "12000"
      127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf
    18. "name3"
      127.0.0.1:6379[9]> ZRANGEBYSCORE s1 (8000 400000
    19. "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 # 查看成员信息
    9. "verctor"
    10. "64"
    11. "lining"
    12. "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命令情况
    7. "unix"
    8. "71"
    9. "lining"
    10. "65"
    11. "verctor"
    12. "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命令
    7. "unix"
    8. "71"
    9. "lining"
    10. "65"
    11. "verctor"
    12. "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 # 查看有序集成员信息
    7. "ll"
    8. "30"
    9. "un"
    10. "35"
    11. "vc"
    12. "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 信息
    13. "ll"
    14. "60" # 分值已乘以2(原数据是30)
    15. "un"
    16. "70" # 分值已乘以2(原数据是35)
    17. "vc"
    18. "100" # 分值已乘以2(原数据是50)
    19. "verctor"
    20. "128"
    21. "lining"
    22. "130"
    23. "unix"
    24. "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]。

相关推荐
秋野酱21 分钟前
Spring Boot 项目的计算机专业论文参考文献
java·spring boot·后端
士别三日&&当刮目相看29 分钟前
数据结构*优先级队列(堆)
java·数据结构
香饽饽~、34 分钟前
【第二篇】 初步解析Spring Boot
java·spring boot·后端
uwvwko44 分钟前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
坎布里奇44 分钟前
java -jar命令运行 jar包时如何运行外部依赖jar包
java·pycharm·jar
冷yan~1 小时前
GitHub文档加载器设计与实现
java·人工智能·spring·ai·github·ai编程
你是狒狒吗1 小时前
消息队列了解一哈
后端
扶尔魔ocy1 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
CodeBlossom1 小时前
java加强 -stream流
java·windows·python