本质上,Memcached是一个简洁的key-value存储系统, 可以保存布尔,整数,浮点数,对象,数组,NULL,二进制数据(视频,音频,文件)。通过在内存中维护一张巨大的hash表. 每次客户端先访问Memcached, 如果命中直接返回数据, 否则丛数据库中查询返回给客户端. 然后更新Memcached.
如果Memcached存满了, 会使用LRU策略淘汰之前的对象内存.
- 基于C/S结构
- 基于libevent的时间处理大并发
- 内存存储系统
- 支持分布式(一致性哈希)
ubuntu下安装
sudo apt-get install memcached
通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务.
telent 127.0.0.1 11211(默认端口)
常用命令只有几个
set 设置键为name, 额外标识0, 保存时间永久, 值长度, 值为ming。 如果已经存在则会进行替换.
set name 0 0 4
ming
STORED
add 添加新数据, 如果之前已经存在, 则不会进行更新
replace 替换值
append 向值的后面追加数据
prepend 向值的前面追加数据
get key1 key2 key3 获取键对应的值
delete key1 key2 删除键值对
stats 统计信息查看, PID, 连接数, 版本号等
php操作实例
如果没有编译 libmemcached, 先下载编译它.
1:先下载libmemcached: wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz 2:解包: tar -zxf libmemcached-1.0.18.tar.gz 3:进入解压后的包,编译: ./configure --prefix=/usr/local/libmemcached --with-memcached //注意:--with-memcached这个选项一定要加上 4:安装 make && make install
安装memcached扩展
wget http://pecl.php.net/get/memcache-2.2.7.tgz tar -zxvf memcache-2.2.7.tgz cd memcache-2.2.7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
php-config 目录如果不知道, 可以find / -name php-config查找.
成功后会出现
Installing shared extensions: /usr/lib/php5/20121212/
然后在php.ini后面配置, 重启之后就可以使用了.
extension_dir = "/usr/lib/php5/20121212/" extension = memcache.so
下面是一个例子
<?php $memcache = new Memcache; //创建一个memcache对象 $memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器 $memcache->set('key', 'test'); //设置一个变量到内存中,名称是key 值是test $get_value = $memcache->get('key'); //从内存中取出key的值 echo $get_value;
在YIi框架中使用
首先进行配置
'components' => [ 'cache' => [ 'class' => '\yii\caching\MemCache', 'servers' => [ [ 'host' => 'server1', 'port' => 11211, 'weight' => 100, ], [ 'host' => 'server2', 'port' => 11211, 'weight' => 50, ], ], ], ],
用法
Yii::$app->cache->set('name', 'ziqing'); echo Yii::$app->cache->get('name');
常用函数
Memcache::add //添加一个值,如果已经存在,则返回false Memcache::addServer // 添加一个可供使用的服务器地址 Memcache::close //关闭一个Memcache对象 Memcache::connect // 创建一个Memcache对象 memcache_debug // 控制调试功能 Memcache::decrement // 对保存的某个key中的值进行减法操作 Memcache::delete //删除一个key值 Memcache::flush // 清除所有缓存的数据 Memcache::get //获取一个key值 Memcache::getExtendedStats //获取进程池中所有进程的运行系统统计 Memcache::getServerStatus// 获取运行服务器的参数 Memcache::getStats //返回服务器的一些运行统计信息 Memcache::getVersion //返回运行的Memcache的版本信息 Memcache::increment //对保存的某个key中的值进行加法操作 Memcache::pconnect // 创建一个Memcache的持久连接对象 Memcache::replace //对一个已有的key进行覆写操作 Memcache::set //添加一个值,如果已经存在,则覆写 Memcache::setCompressThreshold //对大于某一大小的数据进行压缩 Memcache::setServerParams //在运行时修改服务器的参数
这里有个坑, 在本地是可以访问memcached的, 但是远程访问需要修改配置文件/etc/memcached.conf, 否则报错.
-l 127.0.0.1 改为本机的IP地址 -l 192.168.1.100 (远程ip)