• 【线上问题】统计接口返回过慢

    背景业务背景高权限用户要去统计低权限用户的会话存档数据。企微接口调用过多,耗时过长 排查思路查看链路日志。当用户的企微外部联系人过多时,会重复调用企微会话存档是否授权查询接口【接口一次查询上限为100,企微外部联系人最高上限2w】。 解决方案企微耗时...
  • 【线上问题】GC时长过长

    背景机器背景:POD内存小,仅1G业务背景:服务商三方应用,企业微信拉取消息,涉及到对消息key的解密。解密操作代码书写不当,导致大量对象被创建,过早进入老年代,触发FullGC停机 排查思路问题感知GC过长系统告警 Grafana监控显示服务停机 ...
  • 基于SpringAop与SpEL表达式实现缓存逻辑

    背景项目中使用到了大量缓存的场景,而每次书写设置与获取缓存数据的方法过于冗余,所以考虑使用切面来减少重复代码的书写 具体思路 自定义注解+Aop 减少重复代码书写 SpEL表达式 实现对缓存键的动态设置 代码思路注解代码12345678910111...
  • Synchronized关键字

    Synchronized关键字Synchronized实际上就是通过操作Java对象的对象监视器(内部锁),来实现锁的操作 进入同步块时,线程必须先获得与对象关联的监视器。 如果监视器未被其他线程占用,线程将成功获取监视器,并进入同步块执行。 如...
  • 批量删除Redis集群的数据

    问题:Redis集群存在多节点问题,不同的数据存在不同的上,所以我们一次操作无法同时操作多个节点hash槽里面的数据。下面分享几个常见的解决方案。但是他们的解决方案都是大同小异的,都是逐个操作每个键 Redisson12345678910111213...
  • next-keylock备忘

    名词解释解释: 间隙锁(Gap Lock)和行锁合称 NextKey Lock 【前开后闭的区间】间隙锁存在的场景和原因: 当为可重复读的时候,就会用到间隙锁,用来解决幻读问题 加锁规则 原则 1:加锁的基本单位是 next-key lock。希望你...
  • 慢SQL语句执行分析

    案例中的两张表 123456789101112131415161718192021222324252627282930313233CREATE TABLE `tradelog` ( `id` int(11) NOT NULL, `tradeid`...
  • MySQL刷脏页

    起因起因:由于MySQL的WAL机制,会导致内存和磁盘中的数据不一致的情况,此时这个不一致的数据,即是我们标题中提到脏页。 刷脏页的几种场景 InnoDB 的 redo log 写满了。这时候系统会停止所有更新操作,把 checkpoint 往前推进...
  • MySQL动态扩容-【其他文章收录】

    var gitalkConfig = {"clientID":"26b8e6758f16d4524e69","clientSecret":"ecfd9e9a439bcb8a4c4fd21f4677fa102c68b352","re...
  • 三级缓存解决循环依赖

    大致流程图概览 为什么需要第三级缓存:考虑到AOP代理的情况,否则就会有在放入二级缓存的时候同时要把代理类的生成 而二级缓存存在的必要就是为了性能,从三级缓存的工厂里创建出对象,再扔到二级缓存(这样就不用每次都要从工厂里拿) 第二级缓存考虑性能 第...