MySql

MySQL과 Memcache는 어떻게 작동합니까?

베이스 공부 2021. 2. 15. 13:18
반응형

나는 우리의 환경에서 memcached를 이해하고 (아마도 배포하려고) 노력하고 있습니다.

PHP로 개발 된 큰 웹 앱을 실행하는로드 밸런서에 4 개의 웹 서버가 있습니다. 우리는 이미 APC를 사용하고 있습니다. memcached가 어떻게 작동하는지보고 싶습니다. 적어도 캐싱이 어떻게 작동하는지 이해하지 못할 수도 있습니다.

데이터를 가져 오기 위해 여러 테이블을 결합하는 복잡한 동적 쿼리가 있습니다. 매번 데이터는 서로 다른 클라이언트 데이터베이스에서 가져오고 데이터는 계속 변경됩니다. 내 이해에서 일부 데이터가 캐시에 저장되고 요청이 다음 번에 동일하면 동일한 데이터가 반환됩니다. (아니면 여기서 완전히 틀렸을 수도 있습니다).

이 전체 Memcache는 어떻게 작동합니까 (또는 그 문제에 대해 캐싱 작업이 작동 함)?

 

해결 방법

 

일반적으로 캐시는 미리 결정된 키로 값 (일반적으로 직렬화 됨)을 저장할 수있는 매우 빠른 키 / 값 저장소 엔진이므로 동일한 키로 저장된 값을 검색 할 수 있습니다.

MySQL과 관련하여 데이터베이스에 요청을 보내기 전에 캐시에 데이터가 있는지 확인하는 방식으로 애플리케이션 코드를 작성합니다. 일치하는 항목이있는 경우 (일치하는 키가있는 경우) 키와 연결된 데이터에 액세스 할 수 있습니다. 목표는 피할 수있는 경우 더 많은 비용이 드는 데이터베이스에 대한 요청을 발행하지 않는 것입니다.

예 (데모 용) :

$cache = new Memcached();

$cache->addServer('servername', 11211);

$myCacheKey = 'my_cache_key';

$row = $cache->get($myCacheKey);

if (!$row) {

    // Issue painful query to mysql
    $sql = "SELECT * FROM table WHERE id = :id";

    $dbo->prepare($sql);
    $stmt->bindValue(':id', $someId, PDO::PARAM_INT);

    $row = $stmt->fetch(PDO::FETCH_OBJ);

    $cache->set($myCacheKey, serialize($row));
}

// Now I have access to $row, where I can do what I need to
// And for subsequent calls, the data will be pulled from cache and skip
// the query altogether
var_dump(unserialize($row));


 

참조 페이지 https://stackoverflow.com/questions/10135391

 

 

반응형