众所周知,我们能使用Golang轻松编写并发程序。Golang利用goroutine,让我们编写并发程序变得容易。并发程序中重要的问题之一就是如何正确的处理“竞争资源”或“共享资源”。Golang为我们提供了锁的机制。这篇文章,就简单介绍Golang中锁的使用方法。并且进行错误的使用方法和正确的使用方法的代码示例对比。文章的所以代码示例在:https://github.com/pathbox/learning-go/tree/master/src/lock

我们看第一个栗子🌰:

现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1、es2、es3),打算将其升级为5台(增加es4、es5)。这篇文章主要是对整个操作的过程记录,以及出现的问题总结,包括移动数据量所需要的时间。因为,一开始由于不知道线上数据量全部分配完需要多少时间,如果从凌晨开始操作,到早上8点都还没有同步完,这样会影响到白天线上业务的正常使用。

准备阶段

...

如果调用第三方接口,请别忘了超时机制

周末的时候,线上出了问题。是由于IPIP服务商的服务器出了问题,我们调的接口迟迟没有返回值。...

在Rails controller中可以定义回调方法。回调方法是一个队列,满足先进先出的执行顺序。但我们知道,回调有before_action, after_action,...

多个条件进行操作的时候,难免遇到冲突

比如触发器,不同的触发器的触发条件如果有冲突,顺序不同,影响不同。如果A触发器先执行更改记录,会导致B触发器条件不满足而无法执行。如果让B先执行,则两者都可以顺利执行。

...

从同事接手了一个项目。这个项目是用了<go-socket.io>这个库,仿照socket.io的功能,和前端进行交互。因为之前是用socket.io做的后端,但是 觉得性能不够用了,就改用Go来进行重构。重构之后,发生内存泄露的现象。这个项目峰值大概维护1w-1.5w个socket长连接,一开始内存消耗量大概到2g-3g。...

我喜欢在<hosts>文件里给ip地址定义域名名称。比如一台测试服务器的ip地址是<192.168.100.1>

...

在数据库层面建立唯一索引,是最好的防止数据重复的方法,即使是在高并发的情况下

在Rails...

我们知道,Ruby是动态语言。 静态类型:编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误。

动态类型:编译的时候不知道每一个变量的类型,因为类型错误而不能做的事情是运行时错误。...

这周对Rails项目中的ElasticSearch进行了总结并写成了文档,觉得有一些内容值得记录和分享。 这篇文章主要是在Rails项目中对索引,mapping的设置、管理操作的总结,不涉及搜索方面的内容。 源数据是存在MySQL中,ES的数据是MySQL写操作的时候进行了回调同步到ES中,这个应该和很多人的使用同步策略一样。

...

Go有指针类型含义和作用和C语言的指针是一样的,指向类型的地址,而且用途很广,但是你不能对指针进行运算。 比如C语言中的对指针的++ 运算或移位运算在Go中是没有的。

...