Memcached使用场景

Memcached使用场景

Memcached 是 “分布式” 的内存对象缓存系统,那么就是说,那些不需要 “分布” 的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached 不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是 UNIX 本地连接也一样。 在我之前的测试数据中显示,memcached 本地读写速度要比直接 PHP 内存数组慢几十倍,而 APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用 memcached 是非常不划算的。

Memcached 在很多时候都是作为数据库前端 cache 使用的。因为它比数据库少了很多 SQL 解析、磁盘操作等开销,而且它是使用内存来管理数 据的,所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,memcached 可以大大降低数据库压力,使系统执行效率 提升。另外,memcached 也经常作为服务器之间数据共享的存储媒介,例如在 SSO 系统中保存系统单点登陆状态的数据就可以保存在 memcached 中,被多个应用共享。

需要注意的是,memcached 使用内存管理数据,所以它是易失的,当服务器重启,或者 memcached 进程中止,数据便会丢失,所以 memcached 不能用来持久保存数据。很多人的错误理解,memcached 的性能非常好,好到了内存和硬盘的对比程度,其实 memcached 使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于它本身非常 “轻”,因为没有过多的开销和直接 的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,memcached 进程本身并不占用多少 CPU 资源的情况。

由于 Redis 具有丰富的数据结构,极高的性能,以及支持多语言的 API,所以基本各大互联网公司都在使用Redis。下面就列举一些 Redis 使用的典型的场景。

使用场景

  • Twitter 使用 Redis 来储存用户时间线(user timeline)。
  • StackOverflow 使用 Redis 来进行缓存和消息分发。
  • Pinterest 使用 Redis 来构建关注模型(follow model)和兴趣图谱(interest graph)。
  • Flickr 使用 Redis 来构建队列。
  • Github 使用 Redis 作为持久化的键值对数据库,并使用 Resque 来实现消息队列。
  • 新浪微博使用 Redis 来实现计数器、反向索引、排行榜、消息 队列,并储存用户关系。
  • 知乎使用 Redis 来进行计数、缓存、消息分发和任务调度。