继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

PHP memcache 内存缓存 数据库查询应用

蛊毒传说
关注TA
已关注
手记 213
粉丝 17
获赞 84

PHP memcache在数据库查询中应用,减少连接数据库的次数,降低服务器的压力!

/*

 * memcache应用说明 memory cache 内存缓存

 * 工作原理

 *  服务器端口port 11211  

 * MemCached 存取键值对key => value

 * 1.内网访问

 * 2.设置防火墙

 */

  

        //创建memcache对象

        $mem  =  new  Memcache();

         

        //连接memcache服务器

        $host = 'localhost';

        $port = '11211';

        $mem->connect($host,$port);

        //$mem->addserver($host,$port);

        //$mem->addserver('192.168.10.254', 11211); //新增一台服务器的内存

         

        $dsn           =     'mysql:dbname=test;host=localhost';

        $username =    'root';

        $passwd     =    'root';

        $options     =    array(

                                            PDO::ATTR_AUTOCOMMIT=>true,

                                            PDO::ATTR_PERSISTENT=>true

                                           );

        //连接数据库

        try{

            //创建对象

            $pdo =  new PDO($dsn, $username, $passwd, $options);

            //设置错误使用异常模式

            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        }catch(PDOException $e){

            echo "数据库连接失败:".$e->getMessage();

            exit;

        }

         

        $statement = "select * from users where id > ? and id < ?";

        //键名用md5()加密后 名字更规范 防止查询语句信息泄漏

        $key = md5($statement);

         

        //直接从内存要数据

        $data = $mem->get($key);

         

        //判断是否存在$data,如果没有才需要连接数据库获取数据!数据直接从内存获取,实现缓存。

        if(empty($data)){

        try{               

                //给数据库管理系统,编译后等待 没有执行

                $pdostatement=$pdo->prepare($statement);

                $pdostatement->execute(array(3,6));

                //设置结果的模式

                $pdostatement->setFetchMode(PDO::FETCH_NUM);  

                $data = $pdostatement->fetchAll(PDO::FETCH_ASSOC);

                //保存在缓存中

                $mem->set($key, $data,MEMCACHE_COMPRESSED,10);

                echo '第一次数据库查询!<br/>';

        }catch (PDOException $e){

            echo '错误的原因:'.$e->getMessage();

        }

        }

         

        //按表格形式输出

        echo '<table border="1" width="800" align="center">';

        foreach ($data as $value){

            echo '<tr>';

            echo '<td>'.$value['id'].'</td>';

            echo '<td>'.$value['username'].'</td>';

            echo '<td>'.$value['password'].'</td>';

            echo '<td>'.$value['email'].'</td>';

            echo '</tr>';

        }

        echo '</table>';

        //关闭连接

        $mem->close();

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP