高并发接口的性能瓶颈,多时候不是代码慢,是数据库撑不住。Memcached就挺适合用来干这个活儿,把频繁访问的数据放进内存里,响应也快,代码也简单。
Memcached 的 C/S 架构比较灵活,客户端丢个求,服务端就能立刻从内存里捞出结果。你想扩展,直接加节点也不难,还能搭配一致性哈希减少数据迁移,挺省心。
事件用的是libevent,专门对付高并发的,几千个连接照样不慌,关键是不用每次都开线程,系统资源省不少。
内存分配这一块,Memcached 用的是 slab 方式,按固定大小切块,避免碎片问题。像缓存用户信息、商品列表、接口结果这些,用它都挺合适。
安装的话,走一套老三样:./configure
,make
,make install
,熟悉的流程。启动命令也不复杂:
memcached -m 64 -p 11211 -u nobody -l 127.0.0.1
你可以控制内存大小、端口、运行用户和监听地址。
客户端连接也简单,拿PHP举个例子:
//连接服务器
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
//写入缓存
$memcached->set('foo', 'bar', 3600);
//读取缓存
echo $memcached->get('foo');
一两行搞定,开发效率还挺高。
想用好它,几个技巧得记住:设置 TTL控制数据过期时间;多服务时记得用一致性哈希;调试就上telnet或看些监控工具。
如果你项目里有些读多写少的数据,或者接口响应想再快点,不妨试试Memcached。要是你对分布式缓存系统感兴趣,也可以看看这篇Memcached 分布式缓存系统详解。