memcached

운영자 | 기사입력 2015/06/05 [03:17]
리눅스 >
필자의 다른기사 보기 인쇄하기 메일로 보내기 글자 크게 글자 작게
memcached
 
운영자   기사입력  2015/06/05 [03:17]

memcached 는 어떤 결과 값을 메모리 상에 올려 놓고 처리는 하는 프로그램이다.

예을 들자면 웹 게시판이 있다면 db에 게시판 글을  입력해고 

사용자들이 게시판의 글을 읽을 때마다 db에 접속해서 데이타를 뽑아서 보여주는 데

이것을 처음 사용자가 글을 읽을 때는 db에서 뽑아서 보여주고 그 데이타는 

캐쉬에 올려 놓고 다음 사용자가 글을 읽으면 캐쉬에 내용이 있는지를 확인해서 

캐쉬에 있으면 db에 연결하지 않고 캐쉬에 있는 내용을 보여주면 된다.

그러면 db쪽에는 부하를 주지 않고 캐쉬 단위에서 처리가 가능하다.

실제로 웹페이지 구성이 DB에서 많은 쿼리를 통해 데이타를 가져다 보기 때문에 

1페이지에 몇개에서 몇십개까지 db  쿼리를 던지는데   이것을 

미리 결과값을 받아서 캐쉬에 있다가 전달하면 db에 대한 부하를 많이 줄일 수 

있을 것 같습니다.

db내용이 변경이 되면 캐쉬에 내용도 지워기게 해야 업데이트 된 db내용을 다시 캐쉬하게 하면 된다.

 

이 캐쉬는 메모리에 등록이 된것이지기 때문에 서버가 리부팅이 된다면 없어진다.

 

캐쉬에 등록하는 php 함수는 

bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )

이것인데 expire 로 시간을 설정할 수 있다. 

600 이라고 하면 600 초 뒤에는 캐쉬내용이 사라진다.

0 으로 하면 삭제나 리부팅  하기 전까지는 계속 남아 있다.

 

 

=====================================================================

memcached
yum install libevent-devel
yum -y install autoconf*

wget http://memcached.org/latest

tar xvfz latest

cd memcached-1.4.24

./configure --prefix=/home/memcached --enable-64bit

/home/memcached/bin/memcached -u daemon -m 64 -l 127.0.0.1 &


root@wll ~ # vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 16384 65534
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
root@wll ~ # sysctl -p

 


mkdir phpmemcache

/home/php/bin/pecl download memcache
tar xvfz memcache-2.2.7.tgz

/home/php/bin/phpize
./configure -with-php-config=/home/php/bin/php-config
make
cp memcache.php /home/php/lib/php
cp ./modules/memcache.so /home/php/lib/php/extensions

extension="/home/php/lib/php/extensions/memcache.so"

session.save_handler = memcache
session.save_path = "127.0.0.1:11211"


phpinfo();
로 확인

 

===========

<?

class CacheMemcache {

var $iTtl = 600; // Time To Live
var $bEnabled = false; // Memcache enabled?
var $oCache = null;

// constructor
function CacheMemcache() {
if (class_exists('Memcache')) {
$this->oCache = new Memcache();
$this->bEnabled = true;
if (! $this->oCache->connect('localhost', 11211)) { // Instead 'localhost' here can be IP
$this->oCache = null;
$this->bEnabled = false;
}
}
}

// get data from cache server
function getData($sKey) {
$vData = $this->oCache->get($sKey);
return false === $vData ? null : $vData;
}

// save data to cache server
function setData($sKey, $vData) {
//Use MEMCACHE_COMPRESSED to store the item compressed (uses zlib).
return $this->oCache->set($sKey, $vData, 0, $this->iTtl);
}

// delete data from cache server
function delData($sKey) {
return $this->oCache->delete($sKey);
}
}

?>

 

 

 

<?php

$aData = array(
'name' => 'table',
'color' => 'brown',
'size' => array(
'x' => 200,
'y' => 120,
'z' => 150,
),
'strength' => 10,
);

require_once('classes/memcache.caching.php');
$oCache = new CacheMemcache();

echo 'Initial data: <pre>'; // lets see what we have
print_r($aData);
echo '</pre>';


if ($oCache->bEnabled) { // if Memcache enabled

$oCache->setData('my_object', $aData); // saving data to cache server
$oCache->setData('our_class_object', $oCache); // saving object of our class into cache server too

echo 'Now we saved all in cache server, click <a href="index2.php">here</a> to check what we have in cache server';

} else {
echo 'Seems Memcache not installed, please install it to perform tests';
}

?>

 

 

<?php

require_once('classes/memcache.caching.php');
$oCache = new CacheMemcache();

if ($oCache->bEnabled) { // if Memcache enabled

$oCache->delData('my_object'); // removing data from cache server
$oCache->delData('our_class_object'); // removing data from cache server

$aMemData = $oCache->getData('my_object'); // lets try to get data again
$aMemData2 = $oCache->getData('our_class_object');

echo 'Data from cache server: <pre>'; // lets see what we have from cache server
print_r($aMemData);
echo '</pre>';

echo 'Data from cache server of object of CacheMemcache class: <pre>';
print_r($aMemData2);
echo '</pre>';

echo 'As you can see - all data successfully removed. Great !';

} else {
echo 'Seems Memcache not installed, please install it to perform tests';
}

?>

 

트위터 트위터 페이스북 페이스북 카카오톡 카카오톡
기사입력: 2015/06/05 [03:17]  최종편집: ⓒ iwav
 
 
리눅스 많이 본 기사