用memcached缓存mysql数据
Memcached是一个分布式的内存对象缓存系统,通常用于动态Web应用以减轻数据库负载。Memcached是基于一个存储键对的hashmap,当表格满了以后,就使用LRU(最近最小使用)算法机制替换掉。Memcached使用了libevent来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表,因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1). 下面具体说明在centos环境下安装memcached并结合mysql,php来测试Memcache的缓存机制1、安装memcached wget http://skadns.googlecode.com/files/libevent-1.4.8-stable.tar.gzwget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz tar xf libevent-1.4.8-stable.tar.gzcd libevent-1.4.8-stable./configuremake && make installln -sv /usr/local/lib/libevent* /usr/lib/ tar xfmemcached-1.4.15.tar.gzcd memcached-1.4.15./configuremake && make install 尝试启动memcached,启动方法#memcached -d -unobody -m50 -p11211 -P /tmp/memcached.pid说明:-d 以独立方式运行-u 以什么用户启动-m 占用内存大小(默认是100)-p 监听端口号-P 指定pid位置不报信息就ok,netstat -tnlp查看一下2、为php安装memcached扩展(我是用的是php5.4.4)#wget http://pecl.php.net/get/memcache-2.2.5.tgz#tar zxvf memcache-2.2.5.tgz #cd memcache-2.2.5/ #/usr/local/php/bin/phpize #./configure --with-php-config=/usr/local/php/bin/php-config #make #make install在配置文件中添加memcache扩展,命令如下 sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/"\nextension = "memcache.so"#' /usr/local/php/etc/php.ini3、确定已经安装好了mysql数据库,如果没有的话,直接使用yum install mysql-server。 准备测试表mysql>CREATE DATABASE 'lee';mysql>CREATE TABLE `lee1` (`id` int(7) NOT NULL AUTO_INCREMENT,`name` char(8) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;插入数据,格式如下:mysql>INSERT INTO `lee1` VALUES (1,'tom'),(2,'jim'),(3,'abc'),(4,'cde'),(5,'fgh'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03');查看是否有数据 4、测试ok下面就是测试的工作了,这里有个php脚本,用于测试memcache是否缓存数据成功需要为这个脚本添加一个只读的数据库用户,命令格式mysql>grant select on lee.* to memcache@"%">mysql>flush privileges;mysql>\q 测试脚本内容如下: 访问页面测试如果出现mysql表示memcached中没有内容,需要memcached从数据库中取得再刷新页面如果有memcached标志表示这次的数据是从memcached中取得的 也可以通过 telnet 192.168.0.128 11211 使用memcached命令来分析是否有内容memcached有个缓存时间默认是1分钟,过了一分钟后,memcached需要重新从数据库中取得数据我们也可以手动删除,这时手动刷新网页,数据是会再次被缓存的
页:
[1]