php写的带缓存数据功能的mysqli类


下面是一个简单的PHP类示例,该类封装了mysqli的基本操作,并增加了缓存数据的功能。这个缓存功能非常基础,仅用于演示目的,实际生产环境中可能需要更复杂的缓存策略,比如使用Redis或Memcached。


<?php
class CachedMySQLi {
    private $mysqli;
    private $cache = [];

    public function __construct($host, $username, $password, $dbname) {
        $this->mysqli = new mysqli($host, $username, $password, $dbname);

        // 检查连接
        if ($this->mysqli->connect_error) {
            die("连接失败: " . $this->mysqli->connect_error);
        }
    }

    /**
     * 缓存查询结果
     * 
     * @param string $query SQL查询语句
     * @param int $cacheTime 缓存时间(秒)
     * @return mixed 查询结果
     */
    public function queryWithCache($query, $cacheTime = 3600) {
        $cacheKey = md5($query);

        // 检查缓存
        if (isset($this->cache[$cacheKey]) && (time() - $this->cache[$cacheKey]['time']) < $cacheTime) {
            return $this->cache[$cacheKey]['result'];
        }

        // 执行查询
        $result = $this->mysqli->query($query);

        // 处理查询结果
        $data = $result ? $result->fetch_all(MYSQLI_ASSOC) : null;

        // 存储到缓存
        $this->cache[$cacheKey] = [
            'time' => time(),
            'result' => $data
        ];

        return $data;
    }

    /**
     * 关闭数据库连接
     */
    public function close() {
        $this->mysqli->close();
    }
}

// 使用示例
$db = new CachedMySQLi('localhost', 'username', 'password', 'dbname');
$result = $db->queryWithCache("SELECT * FROM users WHERE active = 1");
print_r($result);

$db->close();
?>

这个类`CachedMySQLi`封装了mysqli的连接和基本的查询操作,并增加了一个`queryWithCache`方法来实现带缓存的查询。缓存使用了一个简单的PHP数组,根据查询语句的MD5哈希值作为键来存储和检索数据。缓存时间通过`$cacheTime`参数指定,默认为3600秒(1小时)。

请注意,这个缓存实现非常基础,仅适用于演示和学习目的。在生产环境中,您可能需要使用更高级、更可靠的缓存解决方案,如Redis或Memcached。此外,由于缓存是存储在PHP进程的内存中的,因此当PHP脚本执行完毕后,缓存数据将会丢失。如果需要跨请求或跨进程持久化缓存数据,则需要考虑使用外部缓存服务。