下面是一个简单的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脚本执行完毕后,缓存数据将会丢失。如果需要跨请求或跨进程持久化缓存数据,则需要考虑使用外部缓存服务。