- 博客(976)
- 收藏
- 关注
原创 延时双删除实现方案
log.warn("缓存删除失败,尝试重试({}/{}), key: {}", attempts, maxAttempts, key);log.error("延时双删失败,将记录日志人工处理", e);log.info("延时双删成功,key: {}", key);log.error("缓存删除最终失败", e);log.info("执行延时双删,key: {}", key);log.error("延时任务提交失败,直接同步删除", e);log.error("延时双删异常", e);
2025-04-02 13:48:14
453
转载 redis缓存为什么要延时双删
另外,该方式(第5种,相对第2种,只后删缓存的,可以大大的减少获取到旧缓存的数量)哈希锁因为引入的分段锁来保证锁创建和销毁的同步,这个锁的思想是借助java的弱引用来创建锁,把锁的销毁交给jvm的垃圾回收,来避免额外的消耗。问题2:为了避免缓存清除失败带来的风险,起到在每次操作数据库之前,都还原到没有产生缓存之前的效果。在三中,第二次清空缓存之前,多延时一会儿,等B更新缓存结束了,再删除缓存,这样就缓存就不存在了,其他事务查询到的为新缓存。问题:先删缓存,在改库前,其他事务又把旧数据放到缓存里去了。
2025-04-02 13:35:50
11
原创 redolog与binlog区别
**强制刷盘策略** | 依赖`sync_binlog`参数配置 | 默认每次事务提交刷盘(innodb_flush_log_at_trx_commit=1) |- **binlog**:由 **MySQL Server 层**实现,与存储引擎无关(如InnoDB、MyISAM均支持)。2. **Commit阶段**:写入`binlog`后,提交`redo log`(标记为commit状态)。- **redo log**:由 **InnoDB 引擎**特有,其他存储引擎(如MyISAM)没有此日志。
2025-04-02 08:38:11
315
原创 sql优化
**组合索引策略**:遵循最左匹配原则(如索引 `(a,b,c)` 支持 `a=1`、`a=1 AND b=2`,但不支持单独 `b=2`)。- **索引覆盖**:将查询字段包含在索引中(如 `SELECT a,b FROM table`,索引设为 `(c,a,b)`)。- **常用列加索引**:对高频查询的 `WHERE`、`JOIN`、`ORDER BY` 列建立索引。- 关注 `type` 列:避免 `ALL`(全表扫描),目标至少为 `range` 或 `ref`。
2025-04-01 08:22:47
388
原创 企业微信token及相关接口关联分析
用户级权限,只能访问授权用户的数据。access_token: 企业的 access_token,通过 corpid 和 corpsecret 获取。access_token: 企业的 access_token,通过 corpid 和 corpsecret 获取。如果用户是非企业成员(如外部联系人),返回 OpenId(用户在微信中的唯一标识)。8,企业 access_token 与用户 access_token 的区别。如果用户是企业成员,返回 UserId(用户在企业微信中的唯一标识)。
2025-03-27 23:12:05
508
原创 RocketMQ怎么实现延时消息的?
修改Broker配置文件properties复制# 自定义延时级别(时间单位为毫秒)注意:需要重启Broker生效,且必须保持18个级别。
2025-03-27 14:01:10
602
转载 7个方面总结:审批工作流设计
审批流程是中后台工作流的基础应用,我们在设计的过程中,把握的核心要点是“提高效率,规范管理”,在设计过程中要时时回头审视,以免脱离了这个最重要的目标。
2025-03-21 17:04:41
52
转载 常见的工作流引擎(osworkflow、jbpm、activiti、flowable、camunda)比较
-imptt市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。开发低代码平台、OA系统、BPM软件均需要流程可视化功能,而流程可视化核心是流程引擎和流程设计器,对于市场上如此多的开源流程引擎,哪个功能和性能好,该如何选型呢?
2025-03-21 14:37:35
73
原创 Kafka常见问题
• Topic: 消息队列,生产者和消费者面向的都是一个Topic• Broker: 一个Kafka服务器就是一个Broker,一个集群由多个Broker组成。一个Broker可以容纳多个Topic• Producer: 消息生产者,向Kafka Broker发生消息的客户端• Consumer: 消息消费者,向Kafka Broker取消息的客户端• Consumer Group(CG): 消费者组,由多个Consumer组成。
2025-03-21 09:07:10
669
原创 Docker原理最全详解
镜像可以基于其他镜像构建,并且是层叠的,每一层都代表了对原始镜像的修改,镜像可以从 Docker Hub 、或者私有仓库中获取。当创建一个新的容器时,Docker 会在基础镜像的基础上添加一个读写层,这个读写层包含了:容器中新增的文件、和修改过的文件。Docker 仓库,是存储和分享 Docker 镜像的地方,开发者可以从仓库中获取镜像,并将自己的镜像推送到仓库中。这样,容器的文件系统实际上是由多个层组成的,每个层都代表了对原始镜像的修改,从而实现了文件系统的共享和高效利用。
2025-03-21 09:05:28
333
转载 Java百万数据导出Excel性能优化
在导出的数据量比较多的时候(分页查询有很多页),上述代码会比较慢,一是因为此代码写入时会阻塞下一页的查询,如果每次写入需要0.1秒,百万数据的导出,分页查询每页1万条,则有近10秒的时间浪费了;二是,查询性能通常数倍慢于写入速度,查询一般都经过网络,网络耗时+SQL执行耗时比较多,而写入一般是直接写入到本地磁盘中(或先写入本地临时文件,再通过IO流输出到HTTP响应中),所以上述代码有两个性能优化的点,一是读写分离,写入时不要影响到下一页的读,二是,可以改为。,减少因为写入太快而需要等待查询数据的时间;
2025-03-20 00:10:32
63
原创 零拷贝分析
零拷贝是一种高效的数据传输技术,通过减少数据拷贝次数来提升系统性能。常见的零拷贝技术包括sendfilemmap、DMA 和splice。零拷贝广泛应用于文件传输、消息队列、网络通信和数据库等场景。Kafka 和 RocketMQ 等高性能消息队列系统都使用了零拷贝技术来优化消息的读写性能。
2025-03-17 22:38:39
1084
原创 扫码登录分析
手机端扫码,判断二维码是否生效。根据token+二维码ID,获取pc端token。pc端生成二维码(请求服务),通过轮询服务端判断是否过期。pc端token存redis key=二维码ID value=token。二维码状态:未扫描,已扫描,已过期。手机端:已登陆,获取token。手机端 pc端 服务端。
2025-03-17 22:30:30
143
原创 kafka rocketmq rabbitmq 都是怎么实现顺序消费的
特性KafkaRocketMQRabbitMQ顺序性保证分区内有序,分区间无序队列内有序,队列间无序默认不保证顺序全局顺序消费单分区主题或按 Key 分区单队列主题或按 Key 选择队列单队列单消费者或消息分组并行处理能力高(多分区)高(多队列)低(单队列单消费者)实现复杂度中等中等高(需要外部排序或分组)适用场景高吞吐量、分区顺序消费高吞吐量、队列顺序消费低吞吐量、简单顺序消费Kafka和RocketMQ通过分区或队列的机制,天然支持分区或队列内的顺序消费,适合高吞吐量的场景。
2025-03-14 00:22:39
905
原创 kafka连问
一个分区只能由一个消费者组中的一个消费者实例消费。通过消费者组和分区分配,Kafka实现了消息的并行处理和负载均衡。如果需要更高的并发处理能力,可以增加主题的分区数,并相应地增加消费者实例的数量。Kafka 默认保证分区内有序,但不保证分区间有序。如果需要实现多个分区的总体有序消费,可以通过以下方式:使用单分区主题(简单但性能受限)。按 Key 分区(推荐,平衡顺序性和性能)。消费者端排序(复杂,适合特定场景)。外部全局序列号(需要额外资源)。使用事务或幂等生产者(适合高可靠性场景)。
2025-03-14 00:09:59
1061
3
原创 ELK traceId 通过A服务调用B服务举例
通过上述实现,我们完成了 A 服务调用 B 服务时的traceId传递和日志跟踪。traceId通过 HTTP 头在服务间传递,并通过MDC在日志中输出,确保整个请求链路的日志能够被追踪。
2025-03-12 23:54:37
898
原创 ELK traceId实现跨服务日志追踪
通过上述步骤,我们实现了一个简单的traceId日志跟踪系统。在请求进入时生成traceId并将其放入MDC,在请求完成后清理MDC。日志配置确保traceId能够被输出到日志中,从而方便我们在ELK中追踪请求的完整链路。
2025-03-12 23:53:31
763
原创 URLEncoder.encode
是 Java 中用于对字符串进行 URL 编码的标准方法。它主要用于编码查询参数或路径片段,以确保 URL 的正确性和安全性。使用时需要指定字符编码格式(如UTF-8),以避免乱码问题。如果需要解码,可以使用。
2025-03-10 13:39:25
863
原创 RReadWriteLock读写锁应用场景
不存在:把当前操作数据放入redis 缓存中(同时这个动作加写锁),在加写锁的过程中,是不允许其他读锁读取数据的。操作涉及一批数据,如订单,可能存在多个场景下操作,先使用读锁,从redis缓存中获取操作中数据。先判断当前操作的数据,是否在其他地方操作中(在redis set结构中),set,数据不重复,可以计算交集,判断是否在当前元素中。操作完成,删除缓存中数据(同时加写锁)存在:提示稍后再操作,业务流程终止。关于缓存数据redis结构选取。然后,进行业务逻辑处理。
2025-03-09 22:37:19
218
原创 消息队列为什么会有消费组的概念,什么作用,以订单系统为例说明
消息队列可能会将Partition 1的消息分配给Consumer A,Partition 2的消息分配给Consumer B,Partition 3的消息分配给Consumer C。在分布式系统中,消费组允许多个消费者实例共同消费同一个主题(Topic)中的消息,从而提高消息处理的速度和系统的吞吐量。:如果消费组中的某个消费者失败,其他消费者可以接管其未处理的消息,确保消息不会丢失,提高系统的可靠性。如果没有消费组的概念,可能需要一个强大的消费者来处理所有的订单消息,这在订单量大的情况下会成为瓶颈。
2025-03-08 23:18:38
191
原创 从java角度 抖音直播发布消息量这么大,怎么实时展示的,用了哪些技术实现的,如果用到mq消息不会积压吗
抖音直播的实时消息展示是通过WebSocket + 消息队列 + 分布式缓存 + 流式计算等技术实现的。消息队列的积压问题可以通过水平扩展、动态扩容、消息优先级等方式解决。整体架构设计注重高并发、低延迟和高可用性,确保用户体验流畅。
2025-03-08 21:58:51
333
原创 es优化方面
Elasticsearch 的优化需要从硬件集群设计索引设计查询优化和监控调优等多个方面综合考虑。通过合理的配置和优化,可以显著提升 ES 的性能和稳定性,满足大规模数据和高并发场景的需求。
2025-03-08 17:34:46
871
原创 springboot可以同时处理多少个请求
Spring Boot 的并发处理能力受硬件、服务器配置、应用设计和外部服务等多方面影响。通过合理配置和优化,可以有效提升并发性能。
2025-03-04 22:30:51
529
原创 mysql深度分页优化方案
深度分页的优化核心在于减少MySQL扫描的数据量,避免全表扫描。通过使用索引、游标分页、延迟关联等技术,可以显著提升分页查询的性能。根据具体的业务场景选择合适的优化方案。延迟关联通过先获取主键,再关联查询实际数据的方式,减少了回表次数和I/O操作,特别适合深度分页场景。通过合理设计索引和查询语句,可以显著提升MySQL分页查询的性能。
2025-03-03 18:16:30
1216
原创 JUC模块
是 Java 标准库中用于支持并发编程的模块,提供了丰富的工具类和框架,帮助开发者编写高效、线程安全的并发程序。JUC 模块自 Java 5 引入,是 Java 并发编程的核心部分。它支持高性能、灵活的并发编程,适用于高并发数据处理、任务调度、异步编程等场景。是 Java 并发编程的核心模块,提供了丰富的工具类和框架。// 等待所有任务完成。:提供原子操作,避免使用锁的情况下实现线程安全。JUC 的线程池和并发集合支持高并发场景。
2025-03-02 22:19:16
638
原创 企业微信获取用户信息
System.out.println("用户是非企业成员,OpenId: " + openId);System.out.println("用户是企业成员,UserId: " + userId);这个接口通常用于在企业微信的网页中,通过 OAuth2 授权流程获取当前访问用户的身份信息。在企业微信的网页中,通过 OAuth2 授权流程获取当前访问用户的身份信息。例如,用户访问一个网页时,可以通过该接口判断用户是否是企业成员。通过该接口可以判断用户是否是企业成员,并获取用户的唯一标识(
2025-03-02 01:05:01
688
原创 企业微信获取 jsapi_ticket,相机拍照需要这个吗
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图。jsApiList: ['chooseImage'] // 需要使用的 JS-SDK 接口。// 当前页面的 URL。timestamp: 'TIMESTAMP', // 生成的时间戳。nonceStr: 'NONCESTR', // 生成的随机字符串。signature: 'SIGNATURE', // 生成的签名。appId: 'YOUR_CORP_ID', // 企业 ID。
2025-03-02 01:04:14
758
原创 企业access_token,与用户access_token区别,获取方式,如何获取用户信息
用于调用企业级 API,通过企业 ID 和应用 Secret 获取。
2025-03-01 22:51:02
1038
原创 企业jsapi_ticket
在企业微信开发中,是用于生成 JS-SDK 签名的重要凭证。通过,企业可以在网页中使用企业微信的 JS-SDK,调用诸如拍照、分享、定位等功能。
2025-03-01 22:07:35
908
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人