首页 > 代码库 > 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

  1. <pre name="code" class="php"><?php  

  2.     $memcache = new Memcache;  

  3.   //添加两个memcache  

  4.     $memcache->addServer(‘ip one‘,11211);  

  5.     $memcache->addServer(‘ip two‘,11211);  

  6.     $memcache->set(‘tets1‘,‘nihao‘,0,60);  

  7.     $memcache->set(‘tets2‘,‘wohao‘,0,60);  

我们看到 tes1和tes2保存到哪一个memcache我们不需要关心  memcache自动回通过分布式算法帮我们把相应的数据存到其中的memcache中

那么我们该如何取出数据呢

[php] view plaincopy

  1. $memcache = new Memcache;  

  2. $memcache->addServer(‘ip one‘,11211);  

  3. $memcache->addServer(‘ip two‘,11211);  

  4. 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分布式缓存