Redis는 ANSI C로 작성된, 선택적 내구성을 갖는 오픈 소스, 네트워크, 인-메모리, 키-값 데이터 저장소입니다.
Setup
만약 아직 설치하지 않았다면, Redis 인스턴스를 구성하고 PHP에 대해 Redis 클라이언트 라이브러리를 설치해야 합니다. 대부분의 환경은 phpredis PHP 확장을 요구합니다. 데비안/우분투에서,. 다음 명령을 사용하여 요구 사항을 설치할 수 있습니다:
apt-get install redis-server php-redis
"LocalSettings.php" 파일에서 다음을 설정하십시오:
$wgObjectCaches['redis'] = [
'class' => 'RedisBagOStuff',
'servers' => [ '127.0.0.1:6379' ],
// 'connectTimeout' => 1,
// 'persistent' => false,
// 'password' => 'secret',
// 'automaticFailOver' => true,
];
매개변수 설명
- servers: 서버 이름의 배열입니다. 서버 이름은 호스트이름, 호스트이름/포트 조합 또는 유닉스 소켓의 절대 경로일 수 있습니다. 만약 호스트이름이 지정되었지만 포트가 지정되지 않았으면, 표준 포트 번호 6379가 사용될 것입니다. 배열 키는 호스트/포트 자리에 해시할 태그를 지정하기 위해 사용될 수 있습니다. 요구됨.
- connectTimeout: 새 연결에 대한, 초 단위에서, 시간 초과입니다. 선택적, 기본값은 1초입니다.
- persistent: 여러 웹 요청에서 연결이 지속되도록 하려면 이를 true로 설정하십시오. 기본값은 false입니다.
- password: 인증 비밀번호는 일반 텍스트로 Redis에 전송됩니다. 선택적, 지정되지 않으면 AUTH 명령이 전송되지 않을 것입니다.
- automaticFailover: 이것이 false이면, 각 키가 단일 서버에 매핑될 것이고, 해당 서버가 다운되면, 해당 키에 대한 모든 요청이 실패할 것입니다. 만약 이것이 true이면, 연결 실패가 클라이언트에게 목록에서 다음 서버를 즉시 시도하는 원인이 됩니다 (일관된 해싱 알고리듬에 의해 결정됨). 기본값은 true입니다. 이것은 서버가 플랩할 만큼 충분히 느리면, 예를 들어 서버가 스왑 사망이면, 일관성 문제를 발생할 가능성이 있습니다. 기본값은 true입니다.
이제 wfGetCache( 'redis' )를 통해 Redis 객체 캐시 객체를 얻을 수 있습니다. 만약 Redis를 다양한 데이터의 기본 캐시로 사용하기를 원하면, 다음 구성 옵션 중 임의의 하나를 설정할 수 있습니다:
$wgMainCacheType = 'redis';
$wgSessionCacheType = 'redis';
// 광범위하게 테스트되지 않았음
$wgMessageCacheType = 'redis';
$wgParserCacheType = 'redis';
$wgLanguageConverterCacheType = 'redis';
Job queue
$wgJobTypeConf['default'] = [
'class' => 'JobQueueRedis',
'redisServer' => '127.0.0.1:6379',
'redisConfig' => [],
'claimTTL' => 3600,
'daemonized' => true
];
매개변수 설명
- redisConfig: RedisConnectionPool::__construct()에 대한 매개변수 배열입니다. 직렬 변환기 옵션은 "none"이 항상 사용되므로 무시됨을 주목하십시오. 만약 같은 Redis 서버가 $wgObjectCaches에 대해 사용되면, Redis 비밀번호도 여기에 설정해야 합니다 (위의 $wgObjectCaches 구성을 참조하십시오).
- redisServer: 호스트이름/포트 조합 또는 UNIX 소켓의 절대 경로입니다. 만약 호스트이름이 지정되었지만 포트가 지정되지 않으면, 표준 포트 번호 6379가 사용될 것입니다. 요구됨.
- compression: 사용할 압축 유형입니다; (none,gzip) 중 하나입니다.
- daemonized: redisJobRunnerService가 백그라운드에서 실행되면 true로 설정하십시오. 이것은 중복과 동기화되지 않은 구성을 피하기 위해 미디어위키 측에서 작업 재활용/지연 취소를 비활성화할 것입니다.
그 순간부터, 작업은 지정된 서버를 실행하는 Redis 인스턴스로 전달될 것입니다.
MediaWiki & Wikimedia use cases for Redis
Session storage 위키미디어 재단은 2013년 1월 eqiad 전환 이후 세션 저장소에 대해 memcached 대체품으로 Redis를 사용해 오고 있는데, 왜냐하면 그것은 두 데이터 센터 사이에 데이터를 동기화하기 위해 사용할 수 있는 복제 기능을 가지지 때문입니다. 그것은 모든 사람을 로그아웃하지 않고도 Tampa에서 Ashburn으로 전환하는 것을 허용합니다. Job queue 이전에 MySQL에 MW 작업 대기열을 저장했습니다. 이것은 중복 제거를 위한 복제와 인덱싱과 같은 많은 유용한 기능을 제공했지만, 높은 삽입 비율의 성능 영향을 관리하기 어려운 경우가 많았습니다. 많은 기능 중에서, Redis는 서버 측에 Lua 인터프리터를 포함합니다. 새로운 Redis 작업 대기열 클래스는 주로 고수준 작업 대기열 함수를 제공하는 여러 서버-측 Lua 스크립트를 통해 MySQL 작업 대기열보다 우수한 풍부한 기능 집합을 제공합니다. Redis는 역시 실제로 작업을 가지는 작업 대기열을 추적하는 해시 테이블을 유지하기 위해 사용되므로, 실행기가 어디를 봐야 하는지 알 수 있습니다. 이 테이블에 대한 업데이트는 푸시-기반이므로, 항상 최신 상태입니다. Features Extension:GettingStarted의 카테고리 기반 추천 시스템의 초기 구현은 Redis를 몇 가지 인터페이스를 통해 제공되는 임무의 목록 (실제로는 페이지 ID)을 저장하기 위해 사용했습니다.
Further reading
General
- Official site (see esp. Introduction to Redis)
- The Redis article on the English Wikipedia.
- Redis Watch - an e-mail round-up of Redis news, articles, tools and libraries
- mw:Redis/INCR
- Redis, from the Ground Up
- Redis and Relational Data
- Redis Cookbook (book; not great, but see ch. "Analytics and Time-Based Data")
- Interview with Salvatore Sanfilippo (code-oriented but still useful)
- Redis DB (Google Group)
Analytics
- Redis at Disqus (their entire analytics platform runs on Redis)
- Effective Web App Analytics with Redis
- How YouPorn uses Redis (video)
- Realtime metrics using Redis bitmaps
Tooling
- Redily fully-featured, cross-platform Redis GUI Client
- Redsmin a real-time, atomic, performant administration and monitoring interface for Redis
- redis-py is the library of choice for Python
- Getting Started: Redis and Python
- Redis and Python (presentation slides)
- Resque for jobs
- Redisco, a Python ORM for Redis
- py-analytics (I haven't used this)
- redis-bitops Ruby gem for sparse bitmap operations
Informed Opinions
Miscellaneous
- Storing hundreds of millions of simple key-value pairs (how Instagram uses Redis)
- Key performance metrics to monitor for Redis