作为一种高性能的分布式缓存,Memcached具有如下特点:
Memcached缓存服务器进程和客户端进程之间的通信,非常简单,使用的是基于文本行的协议。如下所示,通过telnet也能在memcached缓存中保存数据、获取数据:
$ telnet 10.11.8.76 12007 Trying 10.11.8.76... Connected to 10.11.8.76 Escape character is '^]'. set key1 0 0 3 (保存命令) value1 (输入数据) STORED (输出结果) get key1 (取得命令) VALUE key1 0 3 (输出数据) value1 (输出数据)
Libevent是一个用C语言写的异步事件通知库,不仅性能非常高,而且十分轻量级。它提供了一组简单的API,而且跨平台;因此,很多软件都把libevent当作底层的网络库来用,而Memcached正是其中一员,基于libevent来实现分布式缓存。(说的有点抽象,如果想有一个比较具象的感觉,那就打一个不是太严谨的比喻,有点类似JavaScript的根据事件来异步调用函数。)
Memcached是完全基于内存来构建缓存的,因此,所有存储在Memcached缓存中的数据,实质上都是在内存中的。因此只要重启Memcached、重启系统就都会丢失所有之前的数据。这就是所谓的“Memcached不存在数据持久化”,Memcached只是缓存,它也只适合作为缓存。
当数据量达到预设的最大使用内存量时,Memcached就会基于默认的LRU(Least Recently Used)删除策略来自动删除最近最少使用的缓存数据。
Memcached虽然号称“分布式”,但是不同的Memcached进程之间是不进行互相通信的;而Memcached则是基于客户端的算法而实现分布式的。少未必是坏事,某些角度上少即是多,Memcached的“分布式”简而不陋;后续章节会进一步介绍Memcached的分布式。