玩玩Memcache缓存组件For PHP

前言 几乎每次面试都会有一个很基本的问题,实习生的基本问题,那就是

如何优化数据库或减少数据库的压力? (1) 合理增加索引 (2) 优化SQL语句 (3) 主从配置(读写分离) (4) ... 注意:除了上面的几点外,我们还可以使用缓存机制,比如Redis、Memcache等等


Memcache简介 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。Memcache依赖libevent事件协程组件,存储机制为键值对的形式,数据存储的方式为内存式。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,所以速度非常快。


Memcache的安装

# memcache依赖libevent
sudo apt-get install libevent-2.0-5 memcached

在何处使用memcache 第一:数据库查询(select)使用 第二:在控制回话(sesion)使用


PHP的Memcache客户端所有方法总结

Memcache::add – 添加一个值,如果已经存在,则返回false 
Memcache::addServer – 添加一个可供使用的服务器地址 
Memcache::close – 关闭一个Memcache对象 
Memcache::connect – 创建一个Memcache对象 
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 – 在运行时修改服务器的参数 

使用缓存的机制 对于基本的缓存机制很简单,如图所示

image.png

代码展示

<?php
/**
 * Created by alic(AlicFeng) on 17-7-18 下午3:38 from PhpStorm.
 * Email is alic@samego.com
 */
//创建memcache对象
$memcache = new Memcache();
$memcache->connect("localhost", 11211);

/** - core 获取数据 **/

//先从缓存读取数据
$data = $memcache->get("data");
//倘若缓存没有数据,那么我们需要从数据库读取
if(!$data){
    echo "<strong>data come from db</strong><br>";
    $db = new mysqli("localhost","samego","samego","demo");
    $sql = "SELECT * FROM `demo`";
    $result = $db->query($sql);
    $data = array();
    while ($row = $result->fetch_assoc()){
        $data[] = $row;
    }
    $result->free();
    $db->close();
    //既然从数据库获取了数据,那就保存到内存
    $memcache->set("data",$data,MEMCACHE_COMPRESSED,3600);
}

print_r($data);
// close
$memcache->close();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏烂笔头

在Python应用中使用MongoDB

目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个...

3654
来自专栏GIS讲堂

Openlayers3中统计图的实现

在前文中讲到了在Arcgis for js中统计图的实现,在本文,讲述在Openlayers3中结合highcharts实现统计图。

592
来自专栏IT技术精选文摘

HBase Region自动切分细节

Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,也必然是所有分布式系统追求无限扩展性的一副良药。HBase系统中Region自动切分是如何实...

2067
来自专栏xcywt

TCP/IP详解 卷1 第二十章 TCP的成块数据流

1.停止等待协议:是tcp保证传输可靠的重要途径,“停止等待”就是指发送完一个分组就停止发送,等待对方确认之后,才能继续发送下一个分组

975
来自专栏西安-晁州

rabbitmq消息队列——"topic型交换器"

在之前的章节中我们改进了我们的日志系统,我们使用direct型交换器代替了只能盲目广播消息的fanout型交换器,这使得我们可以有选择性地接收日志。 尽管使用d...

1880
来自专栏技术碎碎念

同步/异步,阻塞/非阻塞

什么是同步和异步 同步和异步是针对应用程序和内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO...

2976
来自专栏高性能服务器开发

(二)Reactor模式

最近一直在看游双的《高性能linux服务器编程》一书,下载链接: http://download.csdn.net/detail/analogous_love/...

2996
来自专栏高性能服务器开发

(二)Reactor模式

最近一直在看游双的《高性能linux服务器编程》一书,下载链接: http://download.csdn.net/detail/analogous_love/...

4348
来自专栏Alice

iOS textfield实现一行的数字限制,超出进行弹框

步骤一:添加textfield协议‘ @interface LsGeXingQianMingVC ()<UITextFieldDelegate>  步骤2:设置...

1897
来自专栏大数据平台TBDS

Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结

导语:本文细致而全面地讲解使用flume输出数据到HBase的三种不同 Flume-Hbase-Sink 之间的差异性,以及技术细节。并且透彻而全面地总结了不同...

1.1K10

扫码关注云+社区