memcached是一个免费开源的,高性能的,具备分布式对象的缓存系统,它能够用来保存一些常常存取的对象或者数据,保存的数据像一张巨大的hash表,该表示已key-value对的方式保存在内存中。简单的说就是将数据调用到内存中,而后从内存中读取,从而大大提升读取速度。linux
为何会有memcache和memcached两种名称呢?
memcache是这个项目的名称,而memcached是它服务器端的主程序的文件名。算法
memcached特征:shell
memcache的安装
分为两个过程:数据库
Memcache的工做流程:缓存
先检查客户端的请求出具是否在memcached中,若是存在,则直接将数据返回,再也不对数据库进行任何操做;若是请求的数据再也不memcached中,就会先去查询数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(这个过程须要服务端程序去实现);每次更新数据库的同时 更新memcached中的数据,保证一致性;当分配给memcached内存空间用完以后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,而后再替换掉最近未使用的数据。服务器
memcached的内存算法:并发
memcached利用slab allocation机制来分配和管理内存,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分红组,数据在存放时,根据键值大小去批判匹配slab大小,找就近的slab存放,因此存在空间浪费现象。分布式
传统的内存管理方式:使用完经过maclloc分配的内存后经过free来回收内存,这种方式容易产生内存碎片,并下降操做系统对内存的管理效率。memcached
memcached的缓存策略:函数
memcached的缓存策略是LRU(最近最少使用)加上到期失效策略。当你在memcached内存存储数据是,有可能会指定它在缓存的失效时间,默认为永久。当memcached服务器用完分配的内存是,失效的数据的数据首先被替换,而后是最近未使用的数据。在LRU中,memcached使用的是一种Lazy Expiration策略,本身不会监控存入的key/value对是否过时,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过时,这样可减轻服务器的负载。
分布式算法:
memcached安装
先安装libevent
# 下载libevent安装包 wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz # 解压 tar zxvf libevent-2.0.22-stable.tar.gz -C /usr/local/ # 进入到解压目录 cd /usr/local/libevent-2.0.22-stable # 配置编译、安装 ./configure -prefix=/usr/libevent make make install
安装memcached
# 下载memcached的安装包 wget http://memcached.org/files/memcached-1.4.24.tar.gz # 解压安装包到指定的目录 tar zxvf memcached-1.4.24.tar.gz -C /usr/local/ # 进入解压后的目录 cd /usr/local/memcached-1.4.24 # 配置、编译、安装,注:configure时须要指定libevent的安装路径 ./configure -with-libevent=/usr/libevent/ -prefix=/usr/local/memcached make make install
安装完成后,启动memcached
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.100.126 -p 12000 -c 256 -P /tmp/memcached.pid
ps -ef|grep memcached # 查看memcached进程
killcat /tmp/memcached.pid
# 结束memcached进程
启动参数介绍以下:
测试memcached
[root@localhost memcached]# telnet 192.168.100.126 11211 Trying 192.168.100.126... Connected to 192.168.100.126. Escape character is '^]'. set key1 0 60 4 test STORED get key1 VALUE key1 0 4 test END quit Connection closed by foreign host.
memcached安装完成!