- 博客(6)
- 收藏
- 关注
原创 golang 实现基于redis的分布式限速功能
package rate_limitimport ( "fmt" "time" "github.com/go-redis/redis")type RateLimitParam struct { Threhold int64 Period time.Duration}var client *redis.Clientfunc RateL...
2018-11-30 11:14:08
1223
原创 HTTP协议小结
HTTP是一种让Web服务器与浏览器(客户端)通过Internet发送与接收数据的协议,它建立在TCP协议之上,一般采用TCP的80端口。HTTP协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对HTTP服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态Request包分为3部分,第一部分叫R...
2018-07-26 11:59:14
159
原创 linux fork()函数的妙用---redis rdb保存内存快照
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。redis正是利用了这个特性,利用fork()来得到一个当前时刻的内存快照,同时创建的这个子进程可以对这个快照进行落盘,而主进程可以继续接受新的写请求,完美实现了数据的一致性同时丝毫不影响主进程的业务。快照...
2018-07-26 11:47:52
1635
原创 tcp长连接、短连接、连接池的思考
在基于tcp的 rcp实现方式中,有如下几种选择:1. 长连接:同步和异步方式。同步方式下客户端所有请求共用同一连接,在获得连接后要对连接加锁,在读写结束后才解锁释放连接,性能低下,基本很少采用,唯一优点是实现极其简单。异步方式下所有请求都带有消息ID,因此可以批量发送请求,异步接收回复,所有请求和回复的消息都共享同一连接,信道得到最大化利用,因此吞吐量最大。这个时候接收端的处理能...
2018-05-25 15:27:15
4759
原创 go 语言笔记
var表示变量, type表示类型type person struct {name stringage int}var P person // P现在就是person类型的变量了P.name = "Astaxie" // 赋值"Astaxie"给P的name属性.P.age = 25 // 赋值"25"给变量P的age属性fmt.Printf("The person's name is %s", ...
2018-03-08 00:35:08
185
原创 从socket到协程: 浅谈网络服务架构的进化
冰河时代: socket 手工编程单进程石器时代:基于多进程/多线程的同步模型同步阻塞性能低下手工业时代:基于事件驱动的异步模型手工实现异步状态机工业时代:协程后台程序员终于迎来了光明幸福的新时代. 异步状态机的自动实现,同步编码异步执行, 开发效率和运行效率兼顾...
2018-03-07 23:44:29
324
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人