redis第152节答疑 redis源码分析String重要总结

redis的string类型,如果数字大于10000,就不去共享整数中去取,然后就变成了embstr或者raw,为什么不是new一个redisobject,并且编码为int

对于Redis的字符串类型(String),当字符串表示的是一个整数值时,Redis会根据具体情况选择不同的编码方式。对于数字大于10000的情况,Redis不会将其编码为整数类型,而是选择使用其他编码方式,如`embstr`或`raw`。让我解释一下这个设计的原因:

  1. 整数编码的优势:
  • 整数编码可以节省内存空间,提高性能,因为整数类型的值可以直接存储在`redisObject`对象中,而不需要额外的内存分配。

  • 这种编码方式适用于较小的整数范围,通常在-2^63到2^63-1之间。

  1. 数字大于10000的情况:
  • 当数字超过10000时,Redis不再使用整数编码,而是选择其他编码方式。

  • 这是因为对于较大的数字,整数编码可能会浪费过多的内存空间,因为整数类型的值始终占用固定大小的内存。

  1. `embstr`和`raw`编码方式:
  • 对于数字大于10000的情况,Redis会选择使用`embstr`或`raw`编码方式。

  • `embstr`编码方式将字符串嵌入到`redisObject`对象中,类似于之前提到的嵌入式字符串(`EMBSTR`)。

  • `raw`编码方式则会为字符串分配额外的内存空间,并将指针存储在`redisObject`对象中。

  1. 为什么不直接编码为整数类型:
  • 当数字大于10000时,整数编码可能会浪费过多的内存空间,因为整数类型的值始终占用固定大小的内存。

  • 使用其他编码方式可以根据实际字符串长度来动态分配内存,以节省空间。

总结:对于Redis的字符串类型,当数字大于10000时,Redis不再使用整数编码,而是选择其他编码方式,如`embstr`或`raw`。这是为了避免浪费过多的内存空间,并根据实际字符串长度动态分配内存。

===============

那我set k1 10001 然后incr k1 岂不是不能加1,因为编码不是int 而是string或者ra

非常抱歉,我之前的回答有误。对不起给您带来困惑。

实际上,当一个字符串的编码为`embstr`或`raw`时,Redis仍然可以对其执行适当的操作,例如对数字字符串执行自增操作。让我来更正并解释一下:

  1. 字符串编码为`embstr`或`raw`:
  • 当一个字符串的编码为`embstr`或`raw`时,Redis会将其视为普通的字符串,而不是整数。

  • 这意味着即使字符串表示一个数字,Redis也会将其视为字符串处理。

  1. `SET`命令设置键为数字字符串:
  • 当您执行`SET k1 10001`时,Redis会将键`k1`的值设置为字符串`"10001"`,而不是整数。

  • 这是因为Redis会根据字符串的长度和内容来选择适当的编码方式。

  1. `INCR`命令自增操作:
  • 尽管键`k1`的值是一个数字字符串,Redis仍然可以对其执行自增操作。

  • 当您执行`INCR k1`时,Redis会将字符串转换为整数,执行自增操作,然后将结果转换回字符串。

总结:即使一个字符串的编码为`embstr`或`raw`,Redis仍然可以对其执行适当的操作,例如对数字字符串执行自增操作。对于键`k1`的情况,即使它的值是一个数字字符串,Redis可以正确地执行自增操作,并将结果转换回字符串。非常抱歉之前给您带来的混淆和错误的回答。

============

============

Redis 的 String 类型编码机制

在 Redis 中,String 类型是最基本的数据类型,它可以存储文本、整数和浮点数等多种数据。为了优化性能和节省内存,Redis 会根据具体情况选择不同的编码方式来存储 String 类型的数据。主要的编码方式包括:

  1. INT:用于存储整数值。
  2. EMBSTR:用于存储较短的字符串(通常小于 44 字节)。
  3. RAW:用于存储较长的字符串。

编码选择的具体逻辑

  1. 整数编码(INT)

    • 当 String 类型的数据可以被解析为整数,并且值在 - 2^63 到 2^63-1 之间时,Redis 会选择使用整数编码。这种编码方式可以节省内存并提高操作效率。
  2. 嵌入式字符串编码(EMBSTR)

    • 当字符串长度较短(通常小于 44 字节)时,Redis 会选择使用嵌入式字符串编码。这种编码方式将字符串和 Redis 对象结构一起存储在连续的内存块中,减少了内存碎片,提高了性能。
  3. 原始字符串编码(RAW)

    • 当字符串长度较长(通常大于 44 字节)时,Redis 会选择使用原始字符串编码。这种编码方式会为字符串分配独立的内存块,并将指针存储在 Redis 对象结构中。

为什么数字大于 10000 时不使用整数编码

当字符串表示的数字大于 10000 时,Redis 不会将其编码为整数类型,而是选择使用 EMBSTR 或 RAW 编码。具体原因如下:

  1. 内存使用效率

    • 整数编码虽然可以节省内存,但对于较大的整数,整数类型的值始终占用固定大小的内存(通常是 8 字节)。而使用 EMBSTR 或 RAW 编码时,可以根据实际字符串长度动态分配内存,更加灵活。
  2. 操作复杂性

    • Redis 需要在多种操作(如字符串操作、数字操作)之间进行转换。如果
  3. 操作复杂性

    • Redis需要在多种操作(如字符串操作、数字操作)之间进行转换。如果数字过大,需要频繁地在整数和字符串之间转换,会增加代码的复杂性和性能开销。
  4. 内存碎片化

    • 对于大整数,使用固定大小的整数编码可能会造成内存碎片化,降低内存利用率。而使用EMBSTR或RAW编码,可以根据实际需求动态分配内存,减少内存碎片。
  5. 性能考虑

    • 对于大整数,使用整数编码可能会降低某些操作的性能,例如字符串拼接、截取等。而使用EMBSTR或RAW编码,可以更好地适应这些操作。

好的,我继续详细地解释Redis中String类型编码机制的更多细节:

编码选择的动态性:

  • Redis不仅会根据初始值选择编码方式,还会在后续操作中动态地调整编码。
  • 例如,如果一个原本使用EMBSTR编码的字符串被修改为较长的字符串,Redis会自动将其转换为RAW编码。
  • 同样,如果一个RAW编码的字符串被修改为较短的字符串,Redis也会自动将其转换为EMBSTR编码。
  • 这种动态调整编码的机制,可以确保Redis始终使用最优的编码方式,提高内存利用率和操作效率。

编码转换的实现:

  • Redis在编码转换时,会先分配新的内存空间,将数据复制到新空间,然后释放旧的内存空间。
  • 这个过程虽然会带来一定的性能开销,但可以确保数据的完整性和一致性。
  • Redis使用专门的函数来处理编码转换,如ziplistUpgradeFromZiplistsdsMakeRoomFor等,以确保转换过程的正确性和高效性。

编码信息的存储:

  • Redis在redisObject结构体中存储了编码信息,通过encoding字段来标识当前使用的编码方式。
  • 这样,Redis可以快速地确定当前数据的编码方式,并根据需要执行相应的操作。
    • 编码方式的选择依据:

      • Redis在选择编码方式时,不仅考虑数据的长度,还会考虑其他因素,如数据的使用频率、数据的增长趋势等。
      • 这些因素都会影响Redis选择编码方式的决策,以确保最优的内存利用率和操作性能。
    • 编码方式的未来发展:

      • Redis的开发团队一直在努力优化和改进String类型的编码机制,以适应更复杂的应用场景。
      • 未来可能会引入新的编码方式,或者对现有的编码方式进行优化和调整,以进一步提高Redis的性能和灵活性。
    • 好的,我将继续深入探讨Redis中String类型编码机制的更多细节:

    • 编码方式的内部实现:

      • INT编码 :
        • redisObject结构体中,INT编码使用void*指针直接存储整数值。
        • 这种编码方式占用空间小,且可以直接进行数值操作,效率很高。
      • EMBSTR编码 :
        • EMBSTR编码将字符串和redisObject结构体一起存储在连续的内存空间中。
        • 这种编码方式减少了内存碎片,提高了缓存命中率,从而提高了性能。
      • RAW编码 :
        • RAW编码为字符串分配独立的内存块,并在redisObject结构体中存储指向该内存块的指针。
        • 这种编码方式更加灵活,可以适应更长的字符串,但需要额外的内存分配和释放操作。
    • 编码转换的触发条件:

      • Redis会在执行某些操作时,自动检查当前编码方式是否仍然合适,并在必要时进行编码转换。
      • 例如,当使用EMBSTR编码的字符串被修改为较长的字符串时,Redis会自动将其转换为RAW编码。
      • 这种动态调整编码方式的机制,确保了Redis始终使用最优的编码方式。
    • 编码转换的性能影响:

      • 编码转换过程需要分配新的内存空间,将数据复制到新空间,然后释放旧的内存空间。
      • 这个过程会带来一定的性能开销,但Redis使用了各种优化技术,如批量复制、延迟释放等,尽量降低了这种开销。
      • 总的来说,编码转换的性能影响是可接受的,因为它可以确保Redis始终使用最优的编码方式,提高整体的性能和内存利用率。
    • 编码方式的选择策略:

      • Redis的编码方式选择策略非常复杂,不仅考虑数据长度,还会考虑其他因素,如数据的使用频率、增长趋势等。
      • 这些因素的权衡和组合,决定了Redis最终选择的编码方式。
      • 这种动态、智能的编码方式选择策略,是Redis设计的一大亮点,也是其能够高效运行的重要原因之一。
    • 编码方式的未来发展:

      • Redis的开发团队一直在努力优化和改进String类型的编码机制,以适应更复杂的应用场景。
      • 未来可能会引入新的编码方式,或者对现有的编码方式进行优化和调整,以进一步提高Redis的性能和灵活性。

好的,我将继续深入探讨Redis中String类型编码机制的更多细节:

编码方式的内存占用:

  • 不同的编码方式会有不同的内存占用特点:
  • INT编码只需要占用8字节的内存空间,是最节省内存的方式。
  • EMBSTR编码会将字符串和redisObject结构体一起存储在连续的内存空间中,相比RAW编码更加紧凑。
  • RAW编码需要为字符串分配独立的内存块,并在redisObject结构体中存储指向该内存块的指针,因此会有额外的内存开销。

编码方式的性能特点:

  • 不同的编码方式也会有不同的性能特点:
  • INT编码由于只需要操作整数值,因此在数值计算等操作上具有极高的性能。
  • EMBSTR编码由于减少了内存碎片,提高了缓存命中率,在一般的字符串操作上性能较好。
  • RAW编码由于需要进行内存分配和释放,在一些字符串操作上可能会有较高的开销,但对于较长的字符串来说更加灵活。

编码方式的选择依据:

  • Redis在选择编码方式时,会综合考虑以下因素:
  • 数据的长度: 短字符串使用EMBSTR,长字符串使用RAW。
  • 数据的使用频率: 高频访问的数据更倾向于使用INT或EMBSTR编码。
  • 数据的增长趋势: 可能增长较多的数据更倾向于使用RAW编码。
  • 其他因素: 如数据的类型、应用场景等,都会影响Redis的编码方式选择。
    • 编码方式的动态调整:

      • Redis会在运行时动态监测数据的使用情况,并在必要时自动调整编码方式。
      • 例如,当一个EMBSTR编码的字符串被修改为较长的字符串时,Redis会自动将其转换为RAW编码。
      • 这种动态调整机制确保了Redis始终使用最优的编码方式,提高了整体的性能和内存利用率。
    • 编码方式的未来发展:

      • Redis的开发团队一直在努力优化和改进String类型的编码机制,以适应更复杂的应用场景。
      • 未来可能会引入新的编码方式,或者对现有的编码方式进行优化和调整,以进一步提高Redis的性能和灵活性。
      • 例如,可能会引入针对特定应用场景的编码方式,或者针对不同硬件平台进行针对性的优化。

Redis的String类型是其核心数据结构之一,为了提高性能和内存利用率,Redis设计了一套复杂而精细的编码机制。这套机制体现了Redis在性能、内存占用和功能性之间的深入权衡与优化。

首先,Redis支持三种不同的编码方式来存储String类型的数据:INT、EMBSTR和RAW。这三种编码方式各有特点,适用于不同的场景。

INT编码用于存储整数值,它只需要占用8字节的内存空间,是最节省内存的方式。由于直接操作整数值,INT编码在数值计算等操作上具有极高的性能。

EMBSTR编码用于存储较短的字符串(通常小于44字节)。它将字符串和Redis对象结构体一起存储在连续的内存空间中,减少了内存碎片,提高了缓存命中率,从而在一般的字符串操作上性能较好。

RAW编码用于存储较长的字符串。它为字符串分配独立的内存块,并在Redis对象结构体中存储指向该内存块的指针。这种编码方式更加灵活,可以适应更长的字符串,但需要额外的内存分配和释放操作,在某些字符串操作上可能会有较高的开销。

Redis会根据数据的长度、使用频率、增长趋势等因素,动态地选择最合适的编码方式。例如,对于短字符串,Redis更倾向于使用EMBSTR编码;而对于长字符串,则更倾向于使用RAW编码。

更重要的是,Redis会在运行时持续监测数据的使用情况,并在必要时自动调整编码方式。比如,当一个EMBSTR编码的字符串被修改为较长的字符串时,Redis会自动将其转换为RAW编码。这种动态调整机制确保了Redis始终使用最优的编码方式,提高了整体的性能和内存利用率。

Redis的编码方式选择策略非常复杂,不仅考虑数据长度,还会权衡数据的使用频率、增长趋势等多个因素。这种智能的编码方式选择策略,是Redis设计的一大亮点,也是其能够高效运行的重要原因之一。

未来,Redis的开发团队可能会继续优化和改进String类型的编码机制,以适应更复杂的应用场景。例如,可能会引入针对特定应用场景的编码方式,或者针对不同硬件平台进行针对性的优化。这些持续的改进,将使Redis的性能和灵活性得到进一步提升。

总的来说,Redis的String类型编码机制是一个非常复杂和精细的设计,体现了Redis在性能、内存利用率和功能性之间的深入权衡和优化。这也是Redis能够成为一款高性能、高可靠的键值存储系统的重要原因之一。

好的,我将继续深入探讨Redis中String类型编码机制的更多细节:

Redis的String类型编码机制是其核心设计之一,体现了Redis在性能、内存利用率和功能性之间的深入权衡与优化。这套编码机制非常复杂而精细,充分利用了现代计算机硬件的特性,为Redis提供了出色的性能表现。

首先,Redis支持三种不同的编码方式:INT、EMBSTR和RAW。每种编码方式都有其独特的特点和适用场景:

INT编码专门用于存储整数值,它只需要占用8字节的内存空间,是最节省内存的方式。由于直接操作整数值,INT编码在数值计算等操作上具有极高的性能。

EMBSTR编码适用于存储较短的字符串(通常小于44字节)。它将字符串和Redis对象结构体一起存储在连续的内存空间中,减少了内存碎片,提高了缓存命中率,从而在一般的字符串操作上性能较好。

RAW编码用于存储较长的字符串。它为字符串分配独立的内存块,并在Redis对象结构体中存储指向该内存块的指针。这种编码方式更加灵活,可以适应更长的字符串,但需要额外的内存分配和释放操作,在某些字符串操作上可能会有较高的开销。

Redis会根据数据的长度、使用频率、增长趋势等多个因素,动态地选择最合适的编码方式。这种智能的编码方式选择策略,是Redis设计的一大亮点。

更重要的是,Redis会在运行时持续监测数据的使用情况,并在必要时自动调整编码方式。比如,当一个EMBSTR编码的字符串被修改为较长的字符串时,Redis会自动将其转换为RAW编码。这种动态调整机制确保了Redis始终使用最优的编码方式,提高了整体的性能和内存利用率。

Redis的编码方式选择依据非常复杂,不仅考虑数据长度,还会权衡数据的使用频率、增长趋势等多个因素。这些因素的综合权衡,决定了Redis最终选择的编码方式。这种动态、智能的编码方式选择策略,是Redis设计的又一大亮点。

未来,Redis的开发团队可能会继续优化和改进String类型的编码机制,以适应更复杂的应用场景。例如,可能会引入针对特定应用场景的编码方式,或者针对不同硬件平台进行针对性的优化。这些持续的改进,将使Redis的性能和灵活性得到进一步提升。

总的来说,Redis的String类型编码机制是一个非常复杂和精细的设计,充分利用了现代计算机硬件的特性,为Redis提供了出色的性能表现。这也是Redis能够成为一款高性能、高可靠的键值存储系统的重要原因之一。

好的,我将继续深入探讨 Redis 中 String 类型编码机制的更多细节,以提供更全面的理解。

21. 内存管理与垃圾回收

Redis 在内存管理方面采取了一些优化策略,以减少内存碎片和提高内存使用效率。当使用 RAW 编码时,Redis 会为字符串分配独立的内存块。在这种情况下,Redis 会使用自定义的内存分配器,以提高内存分配和释放的效率。此外,Redis 还会定期进行内存回收,释放不再使用的内存,以确保系统的内存使用处于最佳状态。

22. 字符串操作的性能分析

在 Redis 中,字符串操作是最常用的操作之一,例如SETGETINCRAPPEND等。当字符串编码为 INT 时,Redis 可以直接执行数值操作,性能极高。当字符串编码为 EMBSTR 时,由于数据存储紧凑,访问速度快,适合频繁的读写操作。而当字符串编码为 RAW 时,虽然内存分配和释放的开销较高,但对于大字符串的处理能力更强。因此,在设计应用程序时,选择合适的字符串长度和操作方式,可以显著提高 Redis 的性能。

23. 兼容性与数据迁移

Redis 的字符串类型编码机制设计得非常灵活,以便于在不同版本之间进行兼容性维护。在 Redis 的不同版本中,字符串类型的编码可能会发生变化。为此,Redis 在内部实现了数据迁移和转换机制,确保在版本升级或数据格式变化时,数据能够无缝迁移,而不会造成数据丢失或性能下降。这一特性对于维护大型的 Redis 实例尤其重要。

24. 多线程与并发访问

虽然 Redis 本身是单线程的,但在一些场景下,多个客户端的并发访问会对性能产生影响。Redis 通过高效的编码方式和内存管理机制,确保在多用户环境下的访问速度。对于大量的读操作,EMBSTR 编码在内存使用和访问速度上都有优势。而对于高频的写操作,Redis 会通过优化内存分配来减少锁竞争,从而提高并发访问的性能。

25. 应用场景与实际案例

Redis 的 String 类型编码机制在许多实际应用中都表现出了卓越的性能。例如,在社交网络应用中,用户的状态信息通常以字符串形式存储。利用 Redis 的 String 类型,可以实现快速的状态更新和查询。在实时分析应用中,使用 INT 编码存储数值型数据,能够实现高效的计数和累计操作。此外,电子商务平台中的购物车功能,利用 Redis 的字符串存储商品信息和数量,提供了快速的读写性能。

26. 性能监控与调优

为了确保 Redis 持续高效运行,Redis 提供了多种性能监控工具,可以帮助用户分析和优化字符串操作的性能。例如,使用MONITOR命令可以实时查看 Redis 执行的命令,帮助识别性能瓶颈。同时,用户可以通过分析 Redis 的内存使用情况,调整数据结构和编码方式,以提高整体性能。

27. 未来的编码优化方向

随着技术的发展,Redis 的开发团队可能会针对编码机制进行更多的优化。例如,未来可能会根据实际应用场景引入更为智能的编码选择算法,或者在内存分配方面实现更高效的管理策略。此外,面对日益增长的数据量,Redis 的团队也可能考虑引入更为高效的压缩算法,以进一步提高内存利用率。

28. 总结

Redis 的字符串类型编码机制是其设计中最关键的组成部分之一,通过 INT、EMBSTR 和 RAW 的组合,Redis 能够在性能和内存使用之间找到最佳平衡。无论是在高并发环境下的快速读写,还是在低延迟需求的实时应用中,Redis 都能凭借其灵活而高效的编码机制,提供强大的支持。这种设计不仅使 Redis 成为高性能的键值存储解决方案,也为开发人员提供了丰富的工具和策略,以便于在各种场景中应用 Redis。

希望这些补充的信息能够帮助你更全面地理解 Redis 字符串类型编码机制的复杂性与灵活性!如果你有更多具体问题或想了解的方面,请随时告诉我。

好的,我将继续深入探讨 Redis 中 String 类型编码机制的更多细节,以提供一个全面的视角。

29. 数据一致性与原子性

Redis 在处理字符串类型时,保证了操作的原子性。这意味着当多个客户端同时对同一个键进行操作时,Redis 能够确保每个操作都是独立的,不会相互干扰。这种特性对于高并发环境中的数据一致性至关重要。例如,当多个客户端尝试对同一个计数器进行INCR操作时,Redis 能够确保每个操作都被正确地记录,并不会因为并发而导致数据丢失或重复计数。

30. 数据安全与持久化

Redis 支持数据持久化,能够将内存中的数据定期保存到磁盘。对于字符串类型,Redis 在持久化时,会将不同编码方式的数据一并处理,确保在重启或故障恢复时,数据能够准确地恢复。这一特性使得 Redis 不仅适用于缓存场景,也适合需要持久化数据的应用。

  • RDB 持久化:Redis 在指定的时间间隔内将数据快照保存到磁盘,适合对性能要求较高且不需要实时持久化的场景。
  • AOF 持久化:Redis 将每一次写操作记录到日志文件中,确保数据的实时性和一致性,适合对数据安全要求高的场景。

31. 内存优化与节省策略

Redis 支持多种内存优化策略,例如使用maxmemory配置项来限制 Redis 实例的最大内存使用。当内存达到限制时,Redis 会根据不同的策略(如 LRU 或 LFU)来删除旧数据,从而为新数据腾出空间。对于字符串类型,这意味着 Redis 在存储大量数据时,可以动态调整内存使用策略,以确保系统的稳定性和可用性。

32. 数据类型的扩展

尽管 Redis 的 String 类型提供了广泛的功能,但在一些特定场景下,开发者可能需要更复杂的数据结构。为此,Redis 还提供了其他数据类型,如哈希、列表、集合和有序集合。这些数据结构在许多应用场景中可以与字符串类型结合使用,提供更丰富的数据处理能力。例如,开发者可以将用户信息存储为哈希类型,而将用户的状态信息存储为字符串类型,以实现更灵活的数据管理。

33. 编码机制对性能的影响

Redis 的字符串类型编码机制直接影响着系统的整体性能。通过合理选择编码方式和动态调整,Redis 能够在内存占用和操作速度之间找到最佳平衡。例如,在高读频率的应用中,使用 EMBSTR 编码可以显著提升性能,而在高写频率的应用中,RAW 编码可能会提供更大的灵活性。

34. 微服务架构中的应用

在现代微服务架构中,Redis 作为缓存层的角色愈发重要。通过合理设计字符串的编码和数据存储策略,Redis 能够有效提升微服务之间的数据交互效率。在这种架构中,字符串类型通常用于存储会话信息、用户状态和配置信息等,利用 Redis 的高并发性能和低延迟特性,确保服务的响应速度。

35. 实际案例分析

在实际应用中,许多知名企业利用 Redis 的字符串特性来优化性能。例如,在社交媒体应用中,用户的状态更新、评论计数等信息可以通过字符串类型快速存取。在电商平台中,购物车信息通常以字符串形式存储,利用 Redis 的高性能支持用户在浏览商品时的快速添加与修改。这些案例充分展示了 Redis 字符串编码机制的灵活性和实用性。

36. 社区支持与文档

Redis 有一个活跃的社区和丰富的文档资源,开发者可以通过官方文档、GitHub 页面和论坛获取最新的信息和支持。对于字符串类型的编码机制,开发者可以查阅具体的源代码实现和性能基准测试,以便在使用 Redis 时做出更明智的决策。

37. 未来的开发方向

随着技术的不断发展,Redis 不断进行版本迭代和功能扩展。未来的 Redis 可能会引入更多针对特定应用场景的优化,例如对大数据量的处理、对实时分析的支持等。开发团队也可能会继续探索新技术和算法,以进一步提升 Redis 的性能和灵活性。

38. 总结与建议

Redis 的字符串类型编码机制是其设计中最核心的部分之一,体现了在性能、内存利用率和功能性之间的深入权衡与优化。通过合理选择编码方式,开发者可以确保 Redis 在各种应用场景中表现出色。了解这些机制不仅能够帮助开发者更好地使用 Redis,也能够为系统的优化和性能调优提供重要指导。

相关推荐
岁岁岁平安1 分钟前
mysql上课总结(2)(DCL的所有操作总结、命令行快速启动/关闭mysql服务)
数据库·mysql·命令行·权限·dcl·localhost
Boboboobo2 分钟前
记MySQL下一次DEPENDENT SUBQUERY的优化
数据库·sql·mysql·性能优化
chuk.7 分钟前
【JAVA】利用钉钉自定义机器人监控NACOS服务,实现实时下线通知
java·机器人·钉钉
weixi_kelaile5207 分钟前
ai智能语音电销机器人可以做哪些事情?
java·linux·服务器·人工智能·机器人·云计算·腾讯云
hummhumm11 分钟前
Oracle 第13章:事务处理
开发语言·数据库·后端·python·sql·oracle·database
书鸢123615 分钟前
力扣每日一题合集
java·算法·leetcode
魔道不误砍柴功17 分钟前
Java 中 String str = new String(“hello“); 里面创建了几个对象?
java·开发语言·string·new
菜菜-plus1 小时前
微服务技术,SpringCloudAlibaba,Redis,RocketMQ,Docker,分库分表
java·spring boot·redis·spring cloud·docker·微服务·java-rocketmq
隐居的遮天恶鬼1 小时前
Mac OS 搭建MySQL开发环境
数据库·mysql·mac
除了菜一无所有!2 小时前
基于SpringBoot技术的教务管理
java·spring boot·后端