如何用GO语言编写缓存服务?

随着互联网的飞速发展,各行各业对互联网服务的要求也越来越高,服务架构能撑起多大的业务数据?服务响应的速度能不能达到要求?我们的架构师每天都在思考这些问题。

对于数据库或者对象存储等服务来说,它们受限于自己先天的设计目标,往往不能具有很好的性能,响应时间通常是秒级。此时就需要高性能的缓存来为我们的服务提速了,缓存服务的响应时间通常是毫秒级,甚至小于1ms。

缓存服务需要被设置在其他服务的前端,客户端首先访问缓存,查询自己的数据,仅当客户端需要的数据不存在于缓存中时,才去访问实际的服务。从实际的服务中获取到的数据会被放在缓存中,以备下次使用。

缓存的设计目标就是尽可能地快,但它引起了其他的问题。比如目前业界使用较多的缓存服务有Memcached和Redis等,它们都是内存内缓存,单节点最大的容量不能超过整个系统的内存。

如何用GO语言编写缓存服务?

且一旦服务器重启,对于Memcached来说就是内容彻底丢失;Redis稍好一点,但也要花费不少时间从磁盘上的数据文件中重新读入内存。

当我们决定要用Go语言编写一个缓存服务的时候,首先想到的就是HTTP服务。因为用Go语言写基于HTTP的缓存服务真的是太方便了,我们只需要一个map来保存数据,写一个handler负责处理请求,然后调用http.ListenAndServe,最后用go run运行。一切就是这么简单,你不需要去考虑复杂的并发问题,也不需要自己设计一套网络协议,Go语言的HTTP服务框架会帮你处理好底层的一切。

原文链接