memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、Facebook、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。
许多 Web 应用都将数据保存到 RDBMS 中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现 RDBMS 的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该 memcached 大显身手了。memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。memcached 作为高速运行的分布式缓存服务器,具有以下的特点。
• 协议简单
• 基于 libevent 的事件处理
• 内置内存存储方式
• memcached 不互相通信的分布式
协议简单
memcached 的服务器客户端通信并不使用复杂的 XML 等格式,而使用简单的基于文本行的协议。因此,通过 telnet 也能在 memcached 上保存数据、取得数据。
基于 libevent 的事件处理
libevent 是个程序库,它将 Linux 的 epoll、BSD 类操作系统的 kqueue 等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥 O(1)的性能。memcached 使用这个 libevent 库,
因此能在 Linux、BSD、Solaris 等操作系统上发挥其高性能。
内置内存存储方式
为了提高性能,memcached 中保存的数据都存储在 memcached 内置的内存存储空间中。由于数据仅存在于内存中,因此重启 memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于 LRU(Least Recently Used)算法自动删除不使用的缓存。memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这种技术被称为 lazy(惰性)expiration。因此,memcached 不会在过期监视上耗费 CPU 时间。memcached 会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当 memcached 的内存空间不足时就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。
memcached 不互相通信的分布式
memcached 尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个 memcached 不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。
1.安装 memcached
[root@VM_0_5_centos]# yum install memcached -y
[root@VM_0_5_centos]# vim /etc/sysconfig/memcached
[root@VM_0_5_centos sysconfig]# systemctl start memcached.service
[root@VM_0_5_centos sysconfig]# ps aux |grep memca
memcach+ 7408 0.0 0.0 325564 1180 ? Ssl 10:17 0:00 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024
root 7421 0.0 0.0 112660 972 pts/0 R+ 10:17 0:00 grep --color=auto memc
2.memcached安装目录及启动方法
/usr/local/memcached/bin memcached的安装目录
/usr/local/memcached/bin/memcached -u memcached -p11211 -m 1024 -c 64 # 启动memcached
/usr/local/memcached/bin/要放到环境变量里
3.启动方法(一种下面的:另一种写开机启动脚本)(红帽6直接能用 红帽7要加执行权限和启动服务)
chmod a+x /etc/rc.d/rc.local
echo '/usr/local/memcached/bin/memcached -u memcached -p11211 -m 1024 -c 64' >> /etc/rc.d/rc.local
systemctl enable rc-local
###systemctl status rc-local
4 apache 和 macat 的并发量
apache 并发超过200 变慢 到2000 扑概
macat 并发1024
nginx 并发50000
扩展
1.使用memcached原始命令
#yum install telnet
#telnet 10.18.44.105 11211
Trying 111.230.98.201...
#Connected to 111.230.98.201.
Escape character is '^]'.
#set runoob 0 900 9
#memcached
STORED
#get runoob
VALUE runoob 0 9
memcached
END
set name 0 900 5 //设置名称为name的key
参数说明如下:
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
2.使用各个编程语言的api接口
php+php的memcache()