memcached原理、搭建memcached和LAMP架构
一、memcached的作用?
在如今的线网环境中,我们对数据库的访问量日益增加。曾今为了提高数据库的抗压能力,和并发量,通过读写分离和主从复制的架构提高了数据库的一部分抗压能力。但是随着业务量的上升,数据库中的表越来越大,一旦大量的查询请求发来,数据库会花费大量的时间和计算资源去查表,大大的降低了使用者的体验,也对整个集群来说降低了工作的效率。虽然我们可以通过让一个大数据库变成多个小数据库,一张大表变成多个小表,但是一张表中往往还是会记录着多达2000万条记录,大大降低了访问的速率。为此memcached的诞生了,其通过缓存已经查询过的结果在自己的内存之中,当下一次请求来的时候,便会在自己的内存之中直接调用上一次查询的结果而不用去访问数据库,这样极大地增大了整个集群的工作效率,减轻了数据库的负担。
二、为什么查询数据库会存在延迟
比如说,mysql数据库的InnoDB的工作模式下,由于事务具有原子性在查询表的时候会有锁,如果是一张大表这会极大地降低数据库的工作效率。
另外在更新数据库的时候,也同样会有锁这个机制存在,那么也会降低集群的工作效率。
三、memcached的工作机制
memcached是以一种进程的方式在各个服务器上运行的,通过接口去连接客户端。memcached是键值对存储方式,即每个存储的对象都有一个唯一的key与之对应。在读取的时候可以通过key来调用对应的值,并且还可以设置值的缓存时间。
memcached在工作时将数据存储在内存之中,其会向系统请求一大块内存空间去进行数据的存储。当内存空间快使用完的时候,memcached会向系统再次请求一大块内存空间。由于数据是存储在内存之中,所以调用数据的速度是非常快的。
memcached会通过一张hash表来管理这些数据,并且newhash算法可以使查询表的效率进一步提高。所以如果服务器的内存足够大的话,memcached的效率快的令人恐怖。
四、memcached的搭建
1.memcached服务端的搭建
#解压安装包
tar xf libevent-2.1.8-stable.tar.gz -C /opt/
tar xf memcached-1.5.6.tar.gz -C /opt/
#安装环境
yum install gcc gcc-c++ make -y
#先安装好事件库libevent
cd /opt/libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent
#进行编译事件库
make && make install
#安装memcahed数据库
cd /opt/memcached-1.5.6
./configure --prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent
#进行编译
make && make install
#系统识别memcached命令
ln -s /usr/local/memcached/bin/* /usr/local/bin
#memcached -d 指定保护进程 -m指定运行内存 -p指定端口 -u 指定用户
memcached -d -m 32m -p 11211 -u root
这样memcached服务端就搭建完毕了。
我们可以安装telnet来连接memcached,但是最好还是要关闭防火墙。
下面对memcached进行一些操作。
#添加
#add 键名称 序列号 过期时间 值的字节长度
add name 0 0 3
123
#查看
#get 键名称
#gets键名称
get name
#更新
set 键名称 序列号 过期时间 字节长度
#追加
在值之前添加
append 键名称 序列号 时间 长度
内容
这说明memcached是可以正常工作的。
下面是memcached客户端的操作
首先客户端需要搭建LAMP架构。这里不再进行详细的操作。
#安装相应的环境和解压客户端安装包
yum install autoconf -y
tar xf /mnt/memcahe/memcache-2.2.7.tgz -C /opt/
#php为memcached添加编译
/usr/local/php5/bin/phpize
cd /opt/memcache-2.2.7
#编译安装memcached客户端
./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
make && make install
安装成功
#确认路径下的文件是否存在
/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
#开启php的拓展功能模块,修改php.ini配置文件
#搜索extension,在extension_dir下面插入:
extension_dir=/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
extension=memcache.so
#在客户端中检测服务端的连接
<?php
$memcache = new Memcache();
$memcache->connect('192.168.80.133',11211);
$memcache->set('key','it is working memcache',0,60);
$resault = $memcache->get('key');
unset($memcache);
echo $resault;
?>
这里的IP地址指向的是服务端,这样memcached就全部搭建完毕了。