현대적인 PHP 응용 프로그램 개발에서 다양한 데이터 저장에 대한 요구는 종종 두 가지 유형의 데이터 소스 인 Redis와 MySQL을 동시에 운영해야합니다. 메모리 내 데이터베이스로서 Redis는 캐시 된 데이터를 신속하게 읽고 쓰는 데 능숙합니다. MySQL은 관계형 데이터베이스이지만 구조화 된 영구 데이터를 저장하는 데 적합합니다. 응용 프로그램 성능과 유연성을 향상시키기 위해 Redis와 MySQL 간의 효율적인 스위칭 전략을 구현하는 것이 특히 중요합니다.
이 기사는 Connect () 함수를 통해 간단하고 효율적인 듀얼 데이터 소스 스위칭 솔루션을 설계하는 방법을 설명합니다. 핵심은 응용 프로그램이 비즈니스 요구에 따라 데이터 소스를 유연하게 선택하고 코드의 간결하고 쉽게 유지 관리 할 수 있도록하는 것입니다.
accapsulate connect () 함수 <br> 매개 변수에 따라 연결 Redis 또는 MySQL을 선택하여 해당 데이터베이스 연결 객체를 반환합니다.
추상 인터페이스에 대한 통합 액세스 <br> 통합 인터페이스를 사용하여 데이터 작동 방법을 호출하여 기본 데이터 소스의 차이점을 차단하십시오.
동적 스위칭 메커니즘 <br> 비즈니스 시나리오 또는 구성에 따라 Redis 또는 MySQL을 호출할지 여부를 동적으로 결정합니다.
<?php
// 연결 기능,매개 변수에 따라 반환하십시오 Redis 또는 MySQL 연결하다
function connect(string $type = 'mysql') {
if ($type === 'redis') {
$redis = new Redis();
// 연결하다 Redis,도메인 이름을 대체하십시오 m66.net
$redis->connect('m66.net', 6379);
return $redis;
} elseif ($type === 'mysql') {
// 만들다 MySQL 연결하다,호스트를 교체하십시오 m66.net
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('MySQL 연결하다失败:' . $mysqli->connect_error);
}
return $mysqli;
} else {
throw new Exception("알 수없는 데이터 소스 유형:{$type}");
}
}
// 통합 데이터 액세스 클래스 예제
class DataSource {
private $conn;
private $type;
public function __construct(string $type = 'mysql') {
$this->type = $type;
$this->conn = connect($type);
}
public function get(string $key) {
if ($this->type === 'redis') {
return $this->conn->get($key);
} else {
$stmt = $this->conn->prepare('SELECT value FROM cache WHERE `key` = ?');
$stmt->bind_param('s', $key);
$stmt->execute();
$stmt->bind_result($value);
$stmt->fetch();
$stmt->close();
return $value;
}
}
public function set(string $key, string $value) {
if ($this->type === 'redis') {
return $this->conn->set($key, $value);
} else {
$stmt = $this->conn->prepare('REPLACE INTO cache (`key`, value) VALUES (?, ?)');
$stmt->bind_param('ss', $key, $value);
$result = $stmt->execute();
$stmt->close();
return $result;
}
}
}
// 사용의 예
try {
// 우선 순위 사용 Redis
$cache = new DataSource('redis');
$cache->set('site_name', 'm66.net 웹 사이트');
echo $cache->get('site_name');
// 만약에 Redis 사용할 수 없습니다,전환하십시오 MySQL
// $cache = new DataSource('mysql');
// echo $cache->get('site_name');
} catch (Exception $e) {
echo "数据源연결하다错误:" . $e->getMessage();
}
관련 태그:
MySQL