TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
/
注册
用户名
邮箱

PHP面向对象封装Redis、Memcached、Memcache实例

2021-01-12
/
0 评论
/
93 阅读
/
正在检测是否收录...
01/12

Cache.class.php

<?php
class Mysql{
    public $link;

    public function __construct()
    {
        $this->conn();
    }
    /**
     * 连接数据库,从配置文件读取配置信息
     */
    public function conn()
    {
        $cfg = require 'config.php';
        $this->link = new mysqli($cfg['host'], $cfg['name'], $cfg['password'], $cfg['databaseName'], $cfg['port']);
        $this->query('set names ' . $cfg['charset']);
    }
    /**
     * 发送query查询
     * @param string $sql sql语句
     * @return mixed
     */
    public function query($sql)
    {
        return $this->link->query($sql);
    }

    /**
     * 查询多行数据
     * @param string $sql sql语句
     * @return array
     */
    public function getAll($sql)
    {
        $res = $this->query($sql);
        $data = [];
        while ($row = $res->fetch_assoc()) {
            $data[] = $row;
        }
        return $data;
    }
}

class Cache
{
    public $m;
    public function __construct()
    {
        //创建实例
        
        //Redis
        $this->m = new Redis();
        $this->m->connect('127.0.0.1', 6379);
        $this->m->auth('password');//Redis密码

        //Memcached
        /*$this->m = new Memcached();
        $this->m->addServer('127.0.0.1', 11211);*/

        //Memcache
        /*$this->m = new Memcache();
        $this->m->connect('127.0.0.1', 11211);*/
    }
    /**
     * 添加
     * @param string $key 用于存储值的键名
     * @param string $value 存储的值
     * @return boolean
     */
    public function memAdd($key, $value)
    {
        return $this->m->set($key, $value);
    }

    /**
     * 获取
     * @param string $key 要检索的元素的key
     * @return string 失败返回false
     */
    public function memGet($key)
    {
        return $this->m->get($key);
    }

    /**
     * 获取使用序列化来存储数据
     * @param string $key 可以是md5加密后的sql语句
     * @param string $sql sql语句
     * @return array
     */
    public function selectMsg($key, $sql)
    {

        //先查询数据缓存是否有该数据
        $msg = $this->memGet($key);
        //没有则查询数据库
        // var_dump($msg);
        if (!$msg) {
            echo '跑数据库';
            $mysql = new Mysql();
            $list = $mysql->getAll($sql);
            //var_dump($list);
            //把查询出来的结果序列化存进memcached中
            $data = serialize($list);
            $this->memAdd($key, $data);
            //返回数据库查找的值
            return $list;
        } else {
            echo '不跑数据库';
            //有则反序列输出
            return unserialize($msg);
        }
    }
}

//调用
$cache = new Cache();
$sql = 'select * from art';
$key = md5($sql);
$list = $cache->selectMsg($key,$sql);
var_dump($list);

//更新数据
/*$mysql = new Mysql();
$list = $mysql->getAll($sql);
$data = serialize($list);
$cache->memAdd($key,$data);*/

config.php

<?php
return array(
    'host' => 'localhost',
    'name' => 'cs',
    'password' => '123456',
    'databaseName' => 'cs',
    'port' => '3306',
    'charset' => 'utf8'
);
经验PHP面向对象MemcachedRedisMemcache
朗读
赞(1)
版权属于:

至尊技术网

本文链接:

https://www.zzwll.cn/archives/5020/(转载时请注明本文出处及文章链接)

评论 (0)