在PHP中,实现数据库搜索和缓存的方法有很多。这里,我将向您介绍一个简单的示例,使用MySQL数据库和Memcached缓存系统。
users
的表,用于存储用户信息:CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
安装PHP的MySQL扩展(如mysqli
或PDO
)和Memcached扩展。
创建一个名为config.php
的文件,用于存储数据库连接信息和Memcached服务器的IP地址及端口:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
$memcached_host = "127.0.0.1";
$memcached_port = 11211;
?>
search.php
的文件,用于处理搜索请求。在这个文件中,我们将连接到数据库并执行搜索查询。同时,我们将检查Memcached缓存中是否存在搜索结果。如果存在,我们将直接从缓存中获取结果;否则,我们将从数据库中查询结果并将其存储在缓存中:<?php
require_once 'config.php';
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查数据库连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取搜索关键词
$keyword = isset($_GET['keyword']) ? $_GET['keyword'] : '';
// 初始化Memcached客户端
$memcached = new Memcached();
$memcached->addServer($memcached_host, $memcached_port);
// 生成缓存键
$cache_key = 'search_results_' . $keyword;
// 尝试从缓存中获取搜索结果
$results = $memcached->get($cache_key);
if (!$results) {
// 如果缓存中没有结果,则从数据库中查询
$sql = "SELECT * FROM users WHERE username LIKE ? OR email LIKE ?";
$stmt = $conn->prepare($sql);
$search_pattern = '%' . $keyword . '%';
$stmt->bind_param('ss', $search_pattern, $search_pattern);
$stmt->execute();
$result = $stmt->get_result();
// 将查询结果存储在数组中
$results = array();
while ($row = $result->fetch_assoc()) {
$results[] = $row;
}
// 将搜索结果存储到Memcached缓存中,设置缓存有效期为1小时
$memcached->set($cache_key, $results, 3600);
}
// 输出搜索结果
echo json_encode($results);
?>
现在,您可以通过访问search.php?keyword=your_keyword
来执行搜索请求。搜索结果将从数据库中查询,并存储在Memcached缓存中,以便在后续请求中快速获取。