memcached的使用方法和使用场景

Memcache:缓存

缓存分类(存储位置)
1.文件缓存
2.内存缓存
3.数据库缓存(实际开发很少用)

缓存分类(存储数据的不同)
1.页面缓存
2.局部缓存
3.变量缓存(数据缓存)

memcache缓存方式
1.内存缓存
2.变量缓存(数据缓存)

memcache特点
1.数据驻留在内存中
2.速度快
3.存储数据量小
4.计算机断电后,数据全部丢失

memcache支持网络
1.服务
2.端口号

memcache资源包
memcached-1.2.6-win32-bin.zip(32位)
memcache-1.2.6-win64-bin.zip(64位)

memcache服务相关操作
1.安装服务
1)打开命令提示符窗口(以管理员方式打开)
   以管理员身份运行的方法是在C:/windows/system32/下找到cmd之后右键“以管理员身份运行”就好了。
   BCDEdit /SET "{bootmgr}" displaybootmenu yes
2)输入如下命令,进行安装
   切换到e盘(memcached所在的目录)

e:memcached\memcached.exe -d install

2.卸载服务
1)打开命令提示符窗口(以管理员方式打开)
2)输入如下命令,进行安装
   切换到e盘(memcache所在的目录)
memcached\memcached.exe -d uninstall

3.启动或停止服务
1)打开命令提示符窗口(以管理员方式打开)
2)输入如下命令,进行安装
   切换到f盘(memcache所在的目录)
e:回车
memcached\memcached.exe -d start
memcached\memcached.exe -d stop



php操作memcache
修改php.ini配置文件,添加memcache扩展
将php_memcache.dll复制到php安装目录中的ext目录
在php.ini添加如下代码
extension=php_memcache.dll
重启apache服务



memcache缓存数据的方法
$mem=new memcache();
$mem->connect("主机地址",11211);
$变量=$mem->get(“名”);
if($变量==NULL){
    $mem->set(名,值,标识,缓存时间);

}
$mem->close();


memcache方法
1.链接memcache服务
$mem->connect();
2.存储数据
$mem->set(名,值,标识,缓存时间);
3.取数据
$变量=$mem->get(名);
4.替换缓存中的数据
$mem->replace(名,值,标识,缓存时间);
5.删除指定的缓存数据
$mem->delete(名)
6.清空缓存
$mem->flush()
7.关闭连接

$mem->colse()

<?php
       header ( "content-type:text/html;charset=utf-8" );
       //Memcache实现内存缓存
      
       $mem = new Memcache (); //实例化
       $mem -> connect( "localhost" , 11211 ); //连接服务
      
       //从缓存中取数据
       $t = $mem -> get( "t" );
      
       if ($t == NULL ) //缓存中没有t这个数据
       {
            $t = time ();
             //向缓存中添加数据
             $mem -> set( "t" ,$t, MEMCACHE_COMPRESSED , 3 ); //名,值,标识,时间
             /**
             * 第三个参数:标识
             * MEMCACHE_COMPRESSED:启动压缩
             * NULL:不压缩
             */
       }
      
       //替换现有的数据
       //$mem->replace("t",time(),NULL,3);
      
       //删除一个现有的缓存数据
       //$mem->delete("t");
      
       //清空缓存
       //$mem->flush();
      
      
       echo $t;
      
       //关闭与服务的连接
       $mem -> close();   
?>


使用memcached的场景
想象有这么一个场景,一个电子商务网站,在网站的左侧会是商品的分类,中间是商品搜索结果的列表,可以查看商品信息和商家的基本信息和相关商家的信誉度信息。
在这个场景下,因为一个商场的类别不会经常改变的。实时性不是很高,这样应该放到缓存中取的。
一般时候做法:
执行一次或者多次sql从数据库中查询全站的商品分类---->>递归形成你所需的分类tree------>>进入处理数据------->>显示到页面上。
在使用 memcached做法:
第一次显示的时候:判断memcached缓存中是否有该分类----没有----->执行一次或者多次sql从数据库中查询全站的商品分类----->放到memcached中------->>进入处理数据------->>显示到页面
第二次显示的判断memcached缓存中是否有该分类----有--->>-从memcached中取出数据-------->>进入处理数据------->>显示到页面
 当这个过程首次发生时,数据将正常地从数据库或其他数据源加载,然后再存储到 memcached 内。当下一次访问此信息时,它就会从 memcached 中取出,而不是从数据库加载,节省了时间和 CPU 循环。
但是要是数据中的数据改变怎么来更新memcached中的数据呢
过程为:更新数据库中分类的信息------->找到memcached中key值,删除------>重新插入到你的memcached中就可以了
memcached 内的存储操作是原子的,所以信息的更新不会让客户机只获得部分数据;它们获得的或者是老版本,或者是新版本。


面临的问题
对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的边缘也不远了。很多小网站的开发人员一开始都将注意力放在了产品需求设计上,缺忽视了程序整体性能,可扩 展性等方面的考虑,结果眼看着访问量一天天网上爬,可突然发现有一天网站因为访问量过大而崩溃了,到时候哭都来不及。所以我们一定要未雨绸缪,在数据库还 没罢工前,想方设法给它减负,这也是这篇文章的主要议题。
大家都知道,当有一个request过来后,web服务器交给app服务器,app处理并从db中存取相关数据,但db存取的花费是相当高昂的。特 别是每次都取相同的数据,等于是让数据库每次都在做高耗费的无用功,数据库如果会说话,肯定会发牢骚,你都问了这么多遍了,难道还记不住吗?是啊,如果 app拿到第一次数据并存到内存里,下次读取时直接从内存里读取,而不用麻烦数据库,这样不就给数据库减负了?而且从内存取数据必然要比从数据库媒介取快 很多倍,反而提升了应用程序的性能。
因此,我们可以在web/app层与db层之间加一层cache层,主要目的:1. 减少数据库读取负担;2. 提高数据读取速度。而且,cache存取的媒介是内存,而一台服务器的内存容量一般都是有限制的,不像硬盘容量可以做到TB级别。所以,可以考虑采用分布 式的cache层,这样更易于破除内存容量的限制,同时又增加了灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值