- 博客(15)
- 收藏
- 关注
原创 数据库悲观锁导致的惨案(秒杀场景下的update同一资源)
任务中心系统,用来承接APP上的用户的各类行为动作,用户完成了某个行为动作后(比如阅读一篇资讯,比如观看一个直播,入金1000元等等),任务中心会发特定的奖励给用户,每个任务都会配置一个奖品id,每个奖品id代表着一个资源,比如一个100万积分。经过代码排查发现,奖品中心的表做了较多的计数的操作(且为了保证并发计数安全 有update set xx = xxx+1 ,锁等待时间较长,导致程序耗时长,间接拉低了TPS),且由于历史原因,奖品中心相关的表均未分表,且和众多的表做了交互,耗时高。
2024-09-15 12:51:57
982
1
原创 TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
(1)HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接;(2)TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为 TCP 保活机制; (java.net.Scoket就是一种封装了 TCP/IP 的套接字),他的核心在于 从TCP的两端来看,很可能服务端已经关闭了,如果客户端的连接还一直维持着,那就是一种资源的浪费,所以保活机制就是为了避免这种资源浪费,而做的一种资源监测机制(3)还有一个概念是TCP长连接,这个不详细展开说,可以简单理解为T
2024-08-10 17:12:17
1012
1
原创 记一次生产程序OOM崩溃的排查解决
(1)不要总觉得JAVA程序OOM离我们很远,简单的一个HashMap,使用不当,程序经常性的往里面put元素,整个map又不会被GC,或者一些for(i=0;;++i)这种死循环代码,里面有类似list.add()操作,都会很容易产生OOM问题!(2)即使是框架层的代码(比如fastjson),也可能会因为一些逻辑不严谨或者使用不当产生一些OOM问题,需要正确使用,比如try {
2024-07-07 01:26:48
1236
原创 AOP实现分布式锁,基于springboot-starter,拆箱即用
AOP实现分布式锁,基于springboot stater 拆箱即用github地址: https://github.com/hupapaliuli/CiccLockStarter。
2024-07-05 09:53:17
279
原创 线上Redis内存暴涨问题排查
(3)顺着这个思路, 结合之前关于redis集群的相关知识储备,在集群模式下,redis客户端会拿到集群下所有的node节点,维护所有的分片node(16384槽位的一部分)的ip,然后针对该ip进行读写操作。某证券公司APP业务,使用了腾讯云的云数据库redis(TencentDB for Redis)集群版本,2024.6.20运维童鞋反馈,近几周redis的内存量增长很快,日均增加2%,redis集群已经接近80%使用内存(图片待补充)(5)登录到redis的测试集群,执行scan指令,发现报错。
2024-07-05 00:51:12
812
1
原创 arthas实战
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。讲几个比较常用的指令今天现讲一个指令 :dashboard 指令、thread指令。
2024-07-04 00:54:31
4318
原创 spring循环依赖,为什么需要三级缓存?
前面结论说了,一级缓存也可以解决代理对象的循环依赖。一旦这样做了,那么所有代理对象都会提前创建,不管是否有循环依赖,很明显作者原有意图是希望代理对象在执行初始化方法之后再创建代理对象的,这样做破坏了这个流程。但这个时期的版本并没有解决代理对象之间的循环依赖。(这里说的是没有,并不是不能)我们都知道代理对象的创建在initializeBean方法中。三级缓存:保证在代理对象间没有循环引用时,代理对象在执行初始化方法后创建代理对象。那为啥还需要二级缓存,我的理解是为了将半成品对象与初始化好的对象分开。
2024-06-25 23:46:56
357
2
原创 浅谈MySQL的聚集索引
浅谈MySQL的聚集索引聚集索引也称聚簇索引,英文为clustered index,这里通过一个关于新华字典的类比来浅谈下MySQL的聚集索引。下面是一个类比:新华字典的1页:1个磁盘页根据拼音查找字和根据偏旁查找字:2种数据库索引我们的大脑:内存假如执行如下SQL,select * from xinhuazidian where pinyin=“zhang”,也就是查询所有拼音为“zhang”的字,类比到新华字典查找字的过程是:先从拼音索引查找“zhang”,确定了符合条件的字是从第m页到第n
2021-03-25 22:23:15
271
转载 MySQL索引-B+树(看完你就明白了)
MySQL索引-B+树(看完你就明白了)转载自:刘召考的博客 » MySQL索引-B+树(看完你就明白了)PS: 本人第一篇博客,纯手打,首次使用markdown索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引Hash 索引全文索引
2021-03-25 14:57:58
167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人