摘要: 摘要 上次在《动手分析SQL Server中的事务中使用的锁》一文中分析了事务中是如何使用锁,对于insert、update和select中使用的锁以实例的方式进行了初步分析,不过日常使用的时候都是很多事务同时执行,有时候难免会遇到死锁和阻塞的问题,近期在生产环境就遇到了一些死锁方面的问题,本文计划 阅读全文
posted @ 2023-09-28 21:11 hkant 阅读(119) 评论(0) 推荐(1) 编辑
摘要: 本文属于基础知识的回顾,在日常技术交流和日常工作中经常发现有些同事了解关于数据库事务的基本知识,会看SQL语句的执行计划,也知道数据库有X锁、U锁和S锁等各种锁,但是对于这些锁在数据库事务执行期间是如何工作?为何这样配合才能完成数据库事务?数据库是如何对于各种资源加锁的?等等这类的问题不太了解,那么对于事务的执行肯定不会有深刻的认识。 这类知识虽然从网上搜索可以找到很多,但是大多内容重复,并且只注重理论知识而没有实践路径。就好比池塘中的青莲只可远观而无法靠近仔细观察,犹如雾里看花水中望月,对于其真实原理总是似懂非懂。 纸上得来终觉浅,绝知此事要躬行,只有亲自动手进行分析才能对这些问题有深入的认识,因此本文计划从数据库的基础知识入手,以详细的实践分析步骤引导认识数据库事务的执行过程,以期读者可以对于事务有更加深刻的理解。 阅读全文
posted @ 2022-08-22 13:42 hkant 阅读(587) 评论(0) 推荐(1) 编辑
摘要: 在某次巡查生产环境监控数据的时候,发现某个程序的内存占用偏高(大于500M)。对于这个程序的作用需要简单交代一下,这个程序是用做通讯服务程序,通过Socket与IOT设备进行通讯。因为了解这个程序的使用场景,所以对于该程序的内存占用偏高产生了怀疑。该程序服务的设备并不多,但是占用了几百兆的内存,很明 阅读全文
posted @ 2020-12-31 14:09 hkant 阅读(2112) 评论(6) 推荐(12) 编辑
摘要: Dictionary<TKey,TValue>是日常.net开发中最常用的数据类型之一,基本上遇到键值对类型的数据时第一反应就是使用这种散列表。散列表特别适合快速查找操作,查找的效率是常数阶O(1)。那么为什么这种数据类型的查找效率能够这么高效?它背后的数据类型是如何支撑这种查找效率的?它在使用过程 阅读全文
posted @ 2020-06-28 11:17 hkant 阅读(2888) 评论(8) 推荐(21) 编辑
摘要: 一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路。本文从一次生产环境的事故引入这个话题,通过对于事故的分析过程,探讨了平时没有关注到的一些技术要点。二进制序列化结果并不像Json 阅读全文
posted @ 2019-07-01 23:33 hkant 阅读(11286) 评论(18) 推荐(16) 编辑
摘要: MemoryCache是.Net Framework 4.0开始提供的内存缓存类,使用该类型可以方便的在程序内部缓存数据并对于数据的有效性进行方便的管理,借助该类型可以实现ASP.NET中常用的Cache类的相似功能,并且可以适应更加丰富的使用场景。在使用MemoryCache时常常有各种疑问,数据是怎么组织的?有没有可能用更高效的组织和使用方式?数据超时如何控制?为了够知其所以然,本文中对于MemoryCache的原理和实现方式进行了深入分析,同时在分析的过程中学习到了许多业界成熟组件的设计思想,为今后的工作打开了更加开阔的思路 阅读全文
posted @ 2018-06-11 15:05 hkant 阅读(27087) 评论(9) 推荐(25) 编辑
摘要: Nuget快捷实践 简介 本文主要包含三个部分,即创建nuget包、上传nuget包和删除nuget包。旨在引导快速使用nuget打包和使用,并实现对于nuget的简单管理。 本文使用的nuget服务是基于自行搭建的nuget server v3.0.0.0。具体搭建方法可以参考nuget官方的 " 阅读全文
posted @ 2018-03-04 18:44 hkant 阅读(575) 评论(1) 推荐(2) 编辑
摘要: 基于多级缓存的充电系统优化实践 原文是发表在文章中,刚看了下文章主要用于转载,因此在随笔中重新发布一下。 摘要 正如前文中《海量并发下充电业务优化实践》所述,在充电过程中由于涉及到大量的实时数据处理,随着设备规模的扩大,各个节点和服务均感受到较大的压力。为了解决这个情况,文中探讨内存缓存组件的使用及 阅读全文
posted @ 2018-03-04 18:41 hkant 阅读(1042) 评论(0) 推荐(0) 编辑
摘要: 在处理实时数据的过程中需要缓存的参与,由于在更新实时数据时并发处理的特点,因此在更新实时数据时经常产生新老数据相互覆盖的情况,针对这个情况调查了Redis事务和Lua脚本后,发现Redis事务并不能很好的满足该场景的业务需要,必须借助Lua脚本执行原子化的操作才能在理论上解决数据更新的准确性问题。 阅读全文
posted @ 2017-11-03 14:17 hkant 阅读(1128) 评论(1) 推荐(0) 编辑
摘要: 目前在进行充电业务开发时,面对的是充电终端上报的海量并发数据。访问缓存的TPM可达120w,访问数据库的TPM在3w左右,高峰时段面对的是近二十万终端上传的百万条并发的实时数据。在这样的场景下有些无伤大雅的小漏洞最终酿成了生产环境的大问题,正所谓千里之堤毁于蚁穴,面对这样的场景,必须深入理解系统所使用的技术并对于常见问题有必备运维经验和分析能力。本文针对这些问题及解决过程进行分析,总结过往,以飨未来。 阅读全文
posted @ 2017-07-13 13:23 hkant 阅读(1623) 评论(1) 推荐(3) 编辑