首页 > 代码库 > memcache分布式缓存
memcache分布式缓存
1 什么是memcache 以及memcache有什么作用
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
2 下载并安装(希望大家自己去动手 印象会更深)
下载memcache
进入cmd ,切换到 memcached.exe 文件所在目录
memcached.exe –d install
(1) 启动memcached
第一种,可以到服务点击启动
第二种, 命令行
memcached.exe –m 200MB –d start 【以deamon方式启动,默认64M】
如果你在启动时,win7启动不成功, 则可以使用如下方法
memcached.exe –p 端口号
使用netstat –an 如果看到 11211端口在监听,说明启动ok
3 操作memcache
1.登录到telnet连接到 memcached服务
telnet 127.0.0.1 11211 (putty 或者xshell或者cmd均可连接)
4 如何使用php程序操作我们的memcached服务
(1) 把 php_memcache.dll 文件拷贝 php的ext 下
不同版本的php 所使用的 php_memcache.dll 的版本不一样
(2) 修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)
;加载php_memcache.dll 文件
extension=php_memcache.dll
(3) 重新启动apache (查看一下 phpinfo()有没有出现memcache)
(4) 我们写程序来完成curd操作.
常用的方法 (这里不做过多的介绍 也是很简单 大家可以动手看一下 总的来说是 增 删 更新 查询)
Memcache — Memcache类
Memcache::add — 增加一个条目到缓存服务器
Memcache::addServer — 向连接池中添加一个memcache服务器
Memcache::close — 关闭memcache连接
Memcache::connect — 打开一个memcached服务端连接
Memcache::decrement — 减小元素的值
Memcache::delete — 从服务端删除一个元素
Memcache::flush — 清洗(删除)已经存储的所有的元素
Memcache::get — 从服务端检回一个元素
Memcache::getExtendedStats — 缓存服务器池中所有服务器统计信息
Memcache::getServerStatus — 用于获取一个服务器的在线/离线状态
Memcache::getStats — 获取服务器统计信息
Memcache::getVersion — 返回服务器版本信息
Memcache::increment — 增加一个元素的值
Memcache::pconnect — 打开一个到服务器的持久化连接
Memcache::replace — 替换已经存在的元素的值
Memcache::set — Store data at the server
Memcache::setCompressThreshold — 开启大值自动压缩
Memcache::setServerParams — 运行时修改服务器参数和状态
Memcache 函数
memcache_debug — 转换调试输出的开/关
5 Memcached 机制的深入了解
1 基于c/s架构 协议简单
2 基于libevent的事件处理 (是一套跨平台的事件处理接口的封装 能都兼容各种操作系统 memcached利用libevent来进行网络并发连接的处理 能够在很大的并发下保持良好的响应速度)
3 memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除
所谓的LRU算法就是Least Recently Used最近最少使用算法。源于操作系统使用的一种算法,对于在内存中但最近又不用的数据块叫做LRU,操作系统会将那些属于LRU的 数据移出内存,从而腾出空间来加载另外的数据。
4基于客户端的分布式
[php] view plaincopy
<pre name="code" class="php"><?php
$memcache = new Memcache;
//添加两个memcache
$memcache->addServer(‘ip one‘,11211);
$memcache->addServer(‘ip two‘,11211);
$memcache->set(‘tets1‘,‘nihao‘,0,60);
$memcache->set(‘tets2‘,‘wohao‘,0,60);
我们看到 tes1和tes2保存到哪一个memcache我们不需要关心 memcache自动回通过分布式算法帮我们把相应的数据存到其中的memcache中
那么我们该如何取出数据呢
[php] view plaincopy
$memcache = new Memcache;
$memcache->addServer(‘ip one‘,11211);
$memcache->addServer(‘ip two‘,11211);
echo $memcache->get(‘tets1‘);
我们只需要写出我们需要的键名 memcache会自动帮我们自动取出这些数据 我们无须关心怎么取 这些操作对我们来说是透明的
注意细节;
当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
我们知道memcache是把数据存到内存中的 那么只要重启memcache服务器的话数据会被清空 或者保存的值过期时间到的话也会被清除
6 最后我们再讲一个如何把session放到memcache中
步骤:
1. 修改php.ini的配置文件
[sesson.save_handler有user|files|memcache] files是表示用文件保存session也就是php默认的session保存形式 user 是用户自定义的方式 包括(打开 写 读 回收 清除session文件) 今天我们介绍保存在memcache中
需要配置一下参数
session.save_handler= memcache //表示应memcache保存session文件
session.save_path= "tcp://127.0.0.1:11211" //对应的memcache服务地址 以ip:端口形式 (这里可以填写多台memcache 用,号隔开 这样session也就可以用分布式存储了)
测试一把,重启apache 在session_start()时候我们保存的session数据就会保存以上memcache 读取时按正常session读取方式
让我们思考一个问题,如果管理员 不让我们修改php.ini 文件 我们如何处理session入memcached这个功能 我们通过一个函数可以去修改 php.ini 的配置
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://127.0.0.1:9999");
同时你也可以通过 ini_set 去动态的修改对php.ini 的其它设置 但是他不影响其它php页面 也不会去修改php.ini 文件本身 只对本页面生效 也就是说是临时生效的
希望本片文章对大家有所帮助 上面的例子希望大家动手去操作一遍会加深印象
本文出自 “如有缘” 博客,请务必保留此出处http://xiyudongqing.blog.51cto.com/2380647/1556715
memcache分布式缓存