Redis 서버 빌드 및 기본 실행
CentOS 계열 운영체제에서 Redis를 소스 기반으로 구축하려면 먼저 C 컴파일러 및 빌드 의존성을 준비해야 합니다.
yum install -y gcc make tcl wget
공식 배포처에서 안정 버전 아카이브를 다운로드하고 작업 디렉터리에서 압축을 해제합니다.
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
tar -xzf redis-6.2.14.tar.gz
cd redis-6.2.14
메모리 할당 정책을 명시하여 바이너리를 컴파일합니다. 단위 테스트가 정상적으로 통과하면 실행 파일을 지정된 경로에 설치합니다.
make MALLOC=libc
make test
make install PREFIX=/opt/redis
설치 완료 후 버전 정보를 검증하고, 기본 설정 파일을 참조하여 서버 프로세스를 시작합니다.
/opt/redis/bin/redis-server --version
/opt/redis/bin/redis-server /opt/redis/redis.conf
CLI 도구를 통해 로컬 포트에 접속하여 데이터 읽기/쓰기 동작을 확인합니다.
/opt/redis/bin/redis-cli -p 6379
127.0.0.1:6379> HSET app:config theme "dark_mode"
(integer) 1
127.0.0.1:6379> HGET app:config theme
"dark_mode"
PHP 확장 라이브러리(phpredis) 컴파일 및 등록
PHP 런타임에서 Redis 프로토콜을 효율적으로 처리하려면 C 언어로 작성된 확장 모듈을 직접 빌드하는 것이 권장됩니다. PHP 개발 헤더와 자동 구성 유틸리티를 먼저 설치합니다.
yum install -y php-devel autoconf
확장 모듈 저장소를 복제한 후 PHP 빌드 환경을 초기화하고 컴파일 옵션을 적용합니다.
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure --with-php-config=/usr/bin/php-config --enable-redis-igbinary=no
make -j$(nproc)
make install
빌드 결과로 생성된 공유 객체 파일을 PHP 설정에 등록합니다. php.ini 파일 하단에 다음 지시문을 추가합니다.
extension=redis.so
웹 서버 또는 PHP-FPM 데몬을 재시작하여 설정을 반영한 뒤, CLI에서 모듈 로드 여부를 검증합니다.
systemctl restart php-fpm
php -m | grep -i redis
핵심 설정 매개변수 및 PHP 연동 예제
운영 환경에 맞게 redis.conf의 주요 지시자를 조정해야 합니다. bind 127.0.0.1은 로컬 루프백만 허용하며, 외부 접근이 필요하면 서버 사설 IP를 추가합니다. protected-mode yes는 비밀번호 없이 외부에서 접속하는 것을 차단합니다. daemonize yes는 백그라운드 실행을 활성화하며, maxmemory 512mb와 maxmemory-policy volatile-lru는 메모리 상한선과 만료 키 기준 교체 정책을 정의합니다. 데이터 유실 방지를 위해 save 300 10 형식의 RDB 스냅샷 조건을 설정할 수 있습니다.
다음은 PHP 환경에서 확장 모듈을 활용해 연결을 관리하고 캐시 데이터를 처리하는 구조입니다.
<?php
declare(strict_types=1);
$cacheNode = '127.0.0.1';
$listenPort = 6379;
$connTimeout = 3.0;
$store = new Redis();
try {
if (!$store->connect($cacheNode, $listenPort, $connTimeout)) {
throw new RuntimeException('캐시 서버 연결 시간 초과');
}
$metricKey = 'stats:daily_visits';
$currentCount = $store->incr($metricKey);
$store->expire($metricKey, 86400);
$rawData = $store->get($metricKey);
if ($rawData !== false) {
printf("일일 방문자 카운터 업데이트 완료: %d회\n", (int)$rawData);
}
} catch (Exception $fault) {
error_log(sprintf('[Redis Error] %s', $fault->getMessage()));
} finally {
$store->close();
}
?>