[REDIS] 캐시 SQL 결과에 레디 스를 사용하여
REDIS캐시 SQL 결과에 레디 스를 사용하여
나는 SQL 기반 응용 프로그램을하고 난 레디 스를 사용하여 결과를 캐시 것을 좋아합니다. 여러 SQL 테이블과 주소록과 같은 응용 프로그램 생각할 수 있습니다. 응용 프로그램은 다음과 같은 작업을 수행합니다 :
시간의 40 % :
시간의 60 % :
이것은 나의 현재의 접근 방식입니다 :
그 꼭대기에, 나는 레디 스 룩업 테이블은 MySQL 레코드 ID와 레디 스 캐시 키를 저장 (레디 스 세트)가 있습니다. MySQL의 기록이 변경된 경우 나는 레디 스를 삭제할 수 있습니다 그 방법은 캐시 (예를 들어, 대량 업데이트).
새 레코드가 검색 결과 캐시 시스템 후에 생성되는 경우는 어떻게? 새 레코드가 검색 조건에 일치하는 경우 캐시가 삭제 될 때까지, 시스템은 항상 (캐시에 기존 레코드가 업데이트 될 때까지 일어나지 않을 것이다), (새로운 기록을 포함하지 않음) 이전의 캐시를 반환합니다.
검색은 사용자에 의해 구동되며, 검색 조건의 조합은 수많은입니다. 새로운 기록이 작성 될 때 삭제해야하는 캐시 평가할 수 없습니다.
지금까지 유일한 해결책은 기록을 만들 때 MySQL의 테이블의 모든 캐시를 제거하는 것입니다. 많은 레코드가 매일 만들어 때문에 이것은 좋은 선택이 아니다.
이 상황에서, MySQL은 위에 레디 스를 구현하는 가장 좋은 방법은 무엇인가?
해결법
-
==============================
1.이 PHP와 MySQL (I 다른 언어에 대해 확실하지 오전)에 관해서는 여기에 놀라운 일이 -에 물건을 캐싱하지 memcached를 나 레디 스 실제로 빠릅니다. 훨씬 더 빨리. 당신은 당신의 응용 프로그램 및 쿼리의 MySQL을 구축하는 경우 기본적으로 - 당신은 그것을 더 나갈 것입니다.
이 PHP와 MySQL (I 다른 언어에 대해 확실하지 오전)에 관해서는 여기에 놀라운 일이 -에 물건을 캐싱하지 memcached를 나 레디 스 실제로 빠릅니다. 훨씬 더 빨리. 당신은 당신의 응용 프로그램 및 쿼리의 MySQL을 구축하는 경우 기본적으로 - 당신은 그것을 더 나갈 것입니다.
이제 "왜"부분.
InnoDB의 기본 엔진은 뛰어난 엔진입니다. 특히, 메모리 관리 (할당하지 무슨 일이) 어떤 메모리 저장 솔루션 우수하다. 사실이야, 당신은 그것을 찾거나 내 말을 수 있습니다 - 그것은, 적어도, 레디 스 좋은으로 수행합니다.
당신은 쿼리의 MySQL과 레디 스에 결과를 캐시 - 지금 무슨 일이 앱에서 발생합니다. 그러나 MySQL은 캐시 된 결과를 유지하기 위해 스마트 충분히이기도하다. 당신이 방금 한 일은 레디 스에 연결하는 데 필요한 것 추가 파일 기술자를 만드는 것입니다. 당신은 또한 MySQL이 이미 캐시, 그 결과를 캐싱 할 저장 장치 (RAM)을 사용했다.
여기에 또 다른 흥미로운 부분은 온다 - PHP 스크립트를 제공 선호하는 방법은 PHP-FPM을 사용하는 것입니다 - 그것은 밖으로 * 어떤 mod_보다 훨씬 빨리 쓰레기가있다. 핵심에 이르기까지, PHP-FPM은 급부상 아이가 처리하는 감독자 과정이다. , 연결하면 여러 번 사용 - 스크립트가 제공됩니다 후 그들은 MySQL의 연결을 캐시하는 수단 종료되지 않습니다. 이것은 매우 친화적 인 자원이고 그것을 당신에 번개 빠른 연결을 할 수 있습니다 - 당신은 PHP-FPM를 사용하여 스크립트를 제공하는 경우 기본적으로, 그들은 당신이 각 요청에 대한 개폐 연결이되지 않습니다 것을 의미, MySQL로 이미 확립 된 연결을 다시합니다 MySQL은. MySQL은, 메모리를 효율적있는 캐시 된 결과를 가지고 훨씬 더 빨리 레디 스보다.
이제이 모든 것이 당신을 위해 평균 무엇을 - 적절한 설정을 가진 것은 당신의 간단한, 쉬운, 당신은 캐시 무효화와 함께이 무엇을하지 당신은 낭비하지 않을 수도 레디 스 소거하는 모든 문제를 포함하지 않는 작은 코드가 있습니다 당신의 기억은 두 번 같은 데이터를 포함합니다.
당신이 작업이 필요한 성분 :
당신은 당신이 플레이에 추가 시스템을 도입하지 않았다 당신이 데이터를 돌봐 의미의 소프트웨어는 일을 할 수 있도록, 중복 데이터를하지 않았다, 당신은 당신의 코드를 간단하게 유지하고 쉽게 유지하기 위해, 게임에서 레디 스를 제거. 그것을 설치하고 실행하기 위해 더 많은 시간 정도 이상 적용되지 않습니다 - 당신이 모두에게 처음부터 소프트웨어를 컴파일 할 경우에도 최대 유용성에 대한 트레이드 오프 꽤 저렴.
또는, 당신은 내가 쓴 것을 무시하고 레디 스를 사용하여 솔루션을 찾을 수 있습니다.
-
==============================
2.우리는 같은 문제를 만났다 우리는 당신이 생각하는 같은 일을 수행하기로 결정했습니다 : 테이블의 영향을받는 모든 쿼리 캐시를 제거합니다. 당신의 말하지만 지금까지 확인 그래서 다행히도 우리의 "쓰기"가 40 %로 높게없는 것은 적합하지 않습니다. 즉 쿼리 기반 캐싱의 본질이다. 다른 방법으로는 개체 기반 캐싱을 추가 할 수 있습니다. 대신에만 검색 결과를 캐싱, 전체 테이블을 캐시 메모리 내부 검색을 수행. 우리가 메모리에 꽤 일반적인 쿼리를 수행 할 수 있도록 우리는 C # LINQ를 사용하지만 검색이 너무 후 복잡하면 당신은 운이 있습니다.
우리는 같은 문제를 만났다 우리는 당신이 생각하는 같은 일을 수행하기로 결정했습니다 : 테이블의 영향을받는 모든 쿼리 캐시를 제거합니다. 당신의 말하지만 지금까지 확인 그래서 다행히도 우리의 "쓰기"가 40 %로 높게없는 것은 적합하지 않습니다. 즉 쿼리 기반 캐싱의 본질이다. 다른 방법으로는 개체 기반 캐싱을 추가 할 수 있습니다. 대신에만 검색 결과를 캐싱, 전체 테이블을 캐시 메모리 내부 검색을 수행. 우리가 메모리에 꽤 일반적인 쿼리를 수행 할 수 있도록 우리는 C # LINQ를 사용하지만 검색이 너무 후 복잡하면 당신은 운이 있습니다.
from https://stackoverflow.com/questions/31527161/using-redis-to-cache-sql-result by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 값이 목록에 이미 레디 스에 존재하는지 확인 (0) | 2020.01.12 |
---|---|
[REDIS] 어떻게하면 (즉,이 Sidekiq에 대한 인증을 필요로 :: 웹 도구) 내 / sidekiq 경로를 암호로 보호 할 수 있습니까? (0) | 2020.01.12 |
[REDIS] 레디 스 사용 RedisTemplate에서 설정 값을 가져옵니다 (0) | 2020.01.12 |
[REDIS] '서버에서 라인을 읽는 동안 오류'Predis을주고있다 (0) | 2020.01.12 |
[REDIS] Memcache의 비교가, 레디 스 분산 캐싱 프레임 워크으로 Ehcache [폐쇄] (0) | 2020.01.12 |