3547 Word Count
起因
之前说过自己被分配了一个重构代码的任务:
这是一个有6、7年历史,多人经手的老系统,PHP 语言,分布在50台机器上运行。代码使用最简单的结构,没有使用任何完整框架,甚至有三四千行代码的文件,修改时最新的 IDE 都无法帮得上忙,发生问题时排查困难。特别是程序员在写代码时,想引用之前的方法找不到,自己定义新的方法又无处放,只好在已经很杂乱的文件上堆砌。
由于此系统一直在运行中,甚至各机器日顶峰QPS有近1000,而且作为一个业务系统,之前甚至没有CR,里面遍布一些比较“奇怪”的逻辑和写法,看得人头皮发麻,迁移这个系统无异于给行驶的汽车换轮子。
写跟此项目迁移...
3331 Word Count
前言
在“求佛保佑服务器不宕机”、“杀程序员祭天”的环境下,程序员每天可谓是战战兢兢,接到电话和短信都吓得瑟瑟发抖,为了我们的安全,及时发现服务器运行问题已不仅仅是运维的问题了。今天总结一下常见的服务器监控指标,希望各位开发人员都搞一个脚本运行着以保障自己的生命安全。
转载随意,文章会持续修订,请注明来源地址:[https://zhenbianshu.github.io](https://zhenbianshu.github.io) 。
获取服务器信息
多台机器同时需要监控时,每台机器都需要运行一个监控程序,我们首先要获取服务器的信息以分...
3768 Word Count
前言
Redis 应该是开发者最常用的缓存服务器了,它丰富的数据结构,快速高效的内存操作能帮助开发者迅速完成复杂功能的设计,可以说让人一旦使用过后很难再离开它了,甚至在一些业务中,完全可以用 Redis 替代传统的关系型数据库 Mysql。
作为一个内存型数据库,Redis 经常会遇到内存问题,今天我们来谈一下 Redis 常见的内存满的问题,介绍一下给 Redis “瘦身”的通用方式。
转载随意,文章会持续修订,请注明来源地址:[https://zhenbianshu.github.io](https://zhenbianshu.github.io) 。
Re...
3164 Word Count
前言
接上篇 设计模式,Let's “Go”! (中), 继续更新设计模式,今天介绍的设计模式有责任链模式、蝇量模式、解释器模式、中介者模式、备忘录模式、原型模式和访问者模式;
文章对设计模式的特点和使用场景进行了总结,每个设计模式分配的篇幅较少,给了解过设计模式的作为速查,帮不了解设计模式的入门, 当然具体实现才是重点,使用现实生活中的事物例子来帮助理解设计模式。
搭配源码食用更佳,放上 Go 实现设计模式的源码地址:DesignPattern-枕边书-Github ,偶有更新,欢迎 star。
转载随意,文章会持续修订,请注明来源地址:[https://zhe...
2693 Word Count
前几天,从 DBA 手里接到一个 Redis RDB 文件,里面是 15G 约 660万 的 Redis 键值对数据,想通过这些数据提取出当前 Redis 的 Key 和这些 Key 的类型。其文件的每行结构类似于:
KEY: IAmATestKey || TYPE: STRING || expiretime:-1 || value:IAmTheTestValue
下文就是此问题的跳坑和脱坑过程:
转载随意,文章会持续修订,请注明来源地址:[https://zhenbianshu.github.io](https://zhenbianshu.github.io) 。
通用解决方案不好使...
3356 Word Count
前言
接上篇 设计模式,Let's “Go”! (上), 继续更新设计模式,今天介绍的设计模式有模板模式、迭代器模式、组合模式、状态模式、代理模式、桥接模式和建造者模式;
文章对设计模式的特点和使用场景进行了总结,每个设计模式分配的篇幅较少,给了解过设计模式的作为速查,帮不了解设计模式的入门, 当然具体实现才是重点,使用现实生活中的事物例子来帮助理解设计模式。
放上 Go 实现设计模式的源码地址:DesignPattern-枕边书-Github ,偶有更新,欢迎 star。
转载随意,文章会持续修订,请注明来源地址:[https://zhenbianshu.git...
3598 Word Count
前言
最近读了《Head First 设计模式》,每天早上看一章,学习一个设计模式,做些笔记,然后晚上抽空用刚学习的 Go 语言实现一下。半个月下来书读完了,留下了一些笔记,写博客总结一下。
书中的例子都是 Java 写的,但几乎没使用 Java 语言的特性,很容易看懂。对于我来说,就是一个 PHP 开发工程师,读了一本 用 Java 语言实现设计模式的书,然后用 Go 写了一遍。。。=_=
本文为每个设计模式只分配了一小节,总结一下设计模式的概念和特点以及适用场景,并介绍了自己用代码实现时的列举的例子,用现实生活中的事物对比加深一下记忆 ( 代码实现中所有的例子都是自己原创的,有牵强的...
4661 Word Count
问题
可能是由于经验太少,工作中经常会遇到问题,探究和解决问题的过程总想记录一下,所以我写博客经常是问题驱动,首先介绍一下今天要解决的问题:
服务耦合
我们在开发过程中可能会遇到这样的情况:
进程依赖于某服务,所以把服务耦合在进程代码中;
服务初始化耗时长,拖慢了进程启动时间;
服务运行要占用大量内存,多进程时内存损耗严重。
如我上篇文章 小时到分钟 - 一步步优化巨量关键词的匹配 中介绍的文本匹配服务,它是消息处理流程中的一环,被多个消息处理进程依赖,每次初始化进程要 6秒 左右时间构造 Trie 树,而且服务读取关键词大文件、使用树组构造 Trie 树,会...
7825 Word Count
问题由来
前些天工作中遇到一个问题:
有 60万 条短消息记录日志,每条约 50 字,5万 关键词,长度 2-8 字,绝大部分为中文。要求将这 60万 条记录中包含的关键词全部提取出来并统计各关键词的命中次数。
本文完整介绍了我的实现方式,看我如何将需要运行十小时的任务优化到十分钟以内。虽然实现语言是 PHP,但本文介绍的更多的思想,应该能给大家一些帮助。
原始 - grep
设计
一开始接到任务的时候,我的小心思立刻转了起来,日志 + 关键词 + 统计,我没有想到自己写代码实现,而是首先想到了 linux 下常用的日志统计命令 grep。
grep命令的用法不再多提,使用...
5073 Word Count
前言
常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,在 windows 中点击 最小化 去干别的就 OK 了,那么在 linux 下怎么办呢。
可能有的小伙伴会说,再开一个终端窗口不就好了么。可是开很多窗口管理会很不方便,还有万一手贱点了x,或者长时间不操作,远程终端断开了连接,进程停止了,再次打开,又是一番折腾。
今天来介绍几个命令,帮大家系统地梳理一下 linux 的进程调度,并附上一些自己的使用心得和踩过的坑。
名词
在此之前,我们必须(当然也不是必须,但了解原理有利于理解和解决错误)先弄懂几个名词。
进程组
进程组是一个或多个进程的集合,进程组方便了对多个进...