wzhongy 的个人博客

记录美好瞬间

不急功近利,不止步不前,脚踏实地,慢慢来!
  menu
11 文章
0 浏览
1 当前访客
ღゝ◡╹)ノ❤️

开发学习笔记

设置合理的字段类型和长度

我们在设计表的时候,要给相关字段设置合理的字段类型和长度。

如果字段类型和长度不够,有些数据可能会保存失败。

如果字段类型和长度太大了,又会浪费存储空间。

我们在工作中,要根据实际情况而定。

以下原则可以参考一下:

  1. 尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。
  2. 如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。
  3. 是否字段,可以选择bit类型。
  4. 枚举字段,可以选择tinyint类型。
  5. 主键字段,可以选择bigint类型。
  6. 金额字段,可以选择decimal类型。
  7. 时间字段,可以选择timestamp或datetime类型。

异步思想很重要

不知道你有没有做过接口的性能优化,其中有一个非常重要的优化手段是:异步。

如果我们的某个保存数据的API接口中的业务逻辑非常复杂,经常出现超时问题。

现在让你优化该怎么优化呢?

先从索引,sql语句优化。

这些优化之后,效果不太明显。

这时该怎么办呢?

这就可以使用异步思想来优化了。

如果该接口的实时性要求不高,我们可以用一张表保存用户数据,然后使用job或者mq,这种异步的方式,读取该表的数据,做业务逻辑处理。

如果该接口对实效性要求有点高,我们可以梳理一下接口的业务逻辑,看看哪些是核心逻辑,哪些是非核心逻辑。

对于核心逻辑,可以在接口中同步执行。

对于非核心逻辑,可以使用job或者mq这种异步的方式处理。

事件发布订阅和多线程异步、注解异步的区别

事件发布订阅适合:

  • ✅ 业务逻辑解耦
  • ✅ 一个动作触发多个后续处理
  • ✅ 需要支持动态增减处理器
  • ✅ 需要精确的事务边界控制

多线程异步适合:

  • ✅ 需要精确控制线程行为
  • ✅ 复杂的并发逻辑
  • ✅ 需要获取异步结果并进行后续处理
  • ✅ 高性能要求的并发场景

注解异步适合:

  • ✅ 简单的异步方法调用
  • ✅ 不需要获取返回值的场景
  • ✅ 快速实现方法异步化
  • ✅ Spring环境下的简单异步需求

3. 详细对比表

特性事件发布订阅多线程异步注解异步(@Async)
主要目的解耦 + 一对多通信并发执行简化异步调用
执行方式默认同步,可配异步明确异步Spring管理异步
线程管理Spring管理手动管理Spring管理
返回值void(通常)Future/CompletableFutureCompletableFuture
事务传播支持事务监听器需手动处理新事务或无事务
错误处理每个监听器独立需手动处理需配置异常处理器
调用关系一对多一对一一对一
配置复杂度简单复杂简单

发布订阅和消息队列的区别

对比表格

特性Spring事件消息队列(如RabbitMQ)
作用域单个JVM内部跨进程/跨服务
持久化支持
可靠性低(内存中)高(持久化+确认机制)
性能很高较高(有网络开销)
复杂度简单复杂
事务支持与Spring事务集成独立的事务机制
扩展性单机集群/分布式
监控简单丰富的监控工具

标题:开发学习笔记
作者:wzhongy
地址:http://www.wzhongy.club/articles/2025/06/29/1751186228604.html