본문 바로가기
조회 수 307 추천 수 0 댓글 0

단축키

Prev이전 문서

Next다음 문서

단축키

Prev이전 문서

Next다음 문서

Redis와 같은 캐시 시스템을 사용할 때 캐시 일관성 문제가 자주 발생합니다. 원래 데이터 원본(예: 데이터베이스)의 데이터가 변경되면 캐시의 데이터가 데이터 원본과 일치하는지 확인하는 방법은 개발자가 주의해야 할 주요 문제입니다.

1. 캐시 일관성이 필요한 이유

최신 웹 애플리케이션에서는 응답 속도와 시스템 처리량을 향상시키기 위해 캐시를 사용하여 핫 데이터를 저장하는 경우가 많습니다. 고성능 키-값 저장 시스템으로 Redis는 캐싱 계층으로 널리 사용됩니다. 그러나 원본 데이터 소스의 데이터가 변경될 때 캐시의 데이터가 적시에 업데이트되지 않으면 캐시와 데이터 소스 간의 데이터 불일치가 발생하여 애플리케이션의 정확성에 영향을 미칩니다.

2. 캐시 일관성의 과제

쓰기 후 읽기 일관성: 데이터 원본에서 쓰기 작업(예: 업데이트 또는 삭제)이 수행되면 후속 읽기 작업에 이 변경 사항이 반영되어야 합니다. 그러나 캐시가 적시에 업데이트되지 않으면 읽기 작업에서 오래된 데이터가 반환될 수 있습니다.

  • 동시 업데이트: 여러 프로세스나 스레드가 동시에 동일한 데이터를 업데이트하려고 할 때 캐시와 데이터 소스 간의 데이터 일관성을 보장하는 방법이 과제입니다.
  • 무효화 전략: 캐시와 데이터 소스 간의 일관성을 유지하려면 명확한 캐시 무효화 전략이 필요합니다. 그러나 이 전략을 공식화하는 방법은 간단하지 않습니다. 왜냐하면 지나치게 공격적인 무효화 전략은 잦은 캐시 실패를 유발하여 캐시 적중률을 감소시키고, 지나치게 보수적인 전략은 장기간 데이터 불일치를 유발할 수 있기 때문입니다.

3. 캐시 일관성 문제를 해결하기 위한 전략

(1) 먼저 데이터베이스를 업데이트한 후 캐시를 삭제합니다.

데이터를 업데이트해야 하는 경우 먼저 데이터베이스에서 업데이트 작업이 수행됩니다.

업데이트가 성공한 후 해당 캐시 데이터를 삭제하세요. 이 방법의 장점은 간단하고 간단하다는 점이지만, 단점은 일시적인 캐시 불일치가 발생할 수 있다는 것입니다. 즉, 데이터베이스 업데이트와 캐시 삭제 사이의 시간 차이 동안 캐시의 데이터가 오래되었습니다. 이러한 불일치를 줄이기 위해 지연된 이중 삭제 전략을 사용할 수 있습니다. 즉, 데이터베이스를 업데이트한 후 캐시가 즉시 삭제되지 않고 삭제되기 전에 수백 밀리초 동안 지연되어 데이터베이스 마스터로 인한 불일치를 방지할 수 있습니다. -슬레이브 복제 지연.

(2) 먼저 캐시를 삭제한 후 데이터베이스를 업데이트합니다.

데이터베이스를 업데이트하기 전에 해당 캐시 데이터를 삭제하세요.

그런 다음 데이터베이스에서 업데이트 작업을 수행합니다. 이 방법의 위험은 캐시를 삭제한 후 데이터베이스를 업데이트하기 전에 다른 요청이 데이터를 쿼리할 경우 캐시가 존재하지 않기 때문에 이전 데이터를 쿼리하여 캐시에 저장하여 데이터 불일치가 발생할 수 있다는 것입니다. 이러한 위험을 줄이기 위해 분산 잠금을 사용하여 데이터 업데이트 프로세스 중에 다른 요청이 이전 데이터를 쿼리하지 않도록 할 수 있습니다.

(3) 메시지 큐를 사용하여 캐시 일관성을 보장합니다.

데이터베이스의 데이터가 변경되면 메시지가 메시지 대기열에 게시됩니다.

이 메시지 대기열을 수신하는 독립적인 소비자 프로세스가 있습니다. 메시지가 수신되면 해당 캐시된 데이터를 업데이트하거나 삭제하는 일을 담당합니다. 이 방법의 장점은 데이터베이스 업데이트와 캐시 업데이트 작업을 분리하여 시스템의 확장성과 안정성을 향상시킬 수 있다는 것입니다. 단점은 추가적인 복잡성과 종속성(예: 메시지 대기열 시스템)이 발생한다는 것입니다.

(4) Redis 또는 Lua 스크립트의 트랜잭션 기능을 사용합니다.

Redis의 트랜잭션 기능(MULTI/EXEC) 또는 Lua 스크립트 기능을 사용하면 일련의 작업의 원자성을 보장할 수 있습니다. 예를 들어 캐시를 삭제한 다음 단일 트랜잭션으로 데이터베이스를 업데이트하여 두 작업이 모두 성공하거나 실패하도록 할 수 있습니다. 그러나 Redis의 트랜잭션 기능은 기존 관계형 데이터베이스의 격리 수준을 지원하지 않으므로 동시 업데이트 시나리오에서 데이터 일관성을 보장하려면 여전히 추가 처리 로직이 필요합니다.

(5) 최종 일관성 솔루션:

일부 비즈니스 시나리오의 경우 데이터 일관성에 대한 요구 사항이 그다지 엄격하지 않을 수 있습니다. 이 경우 최종 일관성 솔루션을 사용할 수 있습니다. 즉, 데이터 소스가 변경되면 캐시가 즉시 업데이트되지 않고 주기적으로 캐시를 새로 고치는 비동기 작업이 사용됩니다. 이는 시스템의 복잡성을 줄일 수 있지만 어느 정도 실시간 성능을 희생합니다.

(6) 읽기-쓰기 잠금을 사용합니다.

읽기-쓰기 잠금 메커니즘을 도입하면 데이터가 업데이트될 때 다른 읽기 요청이 이전 데이터를 읽지 않도록 보장됩니다. 이 접근 방식은 강력한 일관성을 보장할 수 있지만 시스템의 동시성 성능을 저하시킵니다.

4. 요약

캐시 일관성 문제는 복잡한 문제이며 모든 시나리오에 적용되는 일률적인 솔루션은 없습니다. 실제 적용에서는 특정 비즈니스 요구 사항 및 시스템 특성을 기반으로 적절한 전략을 선택해야 합니다. 데이터 일관성 요구 사항, 시스템 동시성 성능, 복잡성 및 유지 관리 가능성 등을 포함하여 전략을 선택할 때 고려해야 할 여러 측면이 있습니다.




List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 에디터 업데이트+) GPT AI 기능을 포함하여 강력한 도구들을 사용해보세요 ⬆️ file 🍀플로버404 2024.04.16 1222
공지 덕질 공통 이용규칙 및 안내 (업데이트중+ 2024-04-13) 😀컴덕824 2024.04.14 1491
공지 1000P를 모으면 다이소 상품권 1000원을 신청할 수 있습니다. file Private 2024.02.14 3089
52 히토미 https://misskey.io/ 특정 유저 주소는 다운 안되는 문제 😀익명804 2023.08.26 621
51 효율적인 웹 개발을 위한 10가지 Visual Studio Code 확장 file 😀익명863 2024.02.08 249
50 혼자 공부할 수 있는 프로그래밍 강의 링크 모음(국내) 😀익명400 2024.03.15 758
49 특정 문자 삭제 프로그램 (일본어,중국어,한국어,영어가 섞여있을때 편리함) file 😀익명475 2023.04.27 1558
48 취업하려는 공부는 적당히하자 😀익명331 2023.10.11 621
47 진짜 서버 만들었습니다 file 😀익명210 2024.03.09 537
46 제조사 맥 주소 확인 방법(How to check MAC address by manufacturer) 😀익명966 2023.08.31 384
45 이젠 병원에 UX개발 프로세스가 필요하다. file 😀익명100 2024.04.14 348
44 윈도우 파일 폴더 용량 관리 Tree size 😀익명487 2023.08.31 499
43 웹 개발에 매우 ​​유용한 10가지 Github 저장소 file 😀익명538 2024.02.08 256
42 스프링이 취업안될정도면 학벌이 ㅈ구린가봄 😀익명290 2023.10.11 616
41 서버 PHP용 다중 코어를 사용하는 방법 2 😀익명849 2023.11.06 225
40 메인보드 전원,리셋,LED,스피커 선 연결하는방법 😀익명469 2023.08.31 634
39 레드햇, RHEL 소스를 CentOS Stream에만 제공 file 😀익명436 2023.06.24 163
38 레노버 CMOS setup 진입방법 file 😀익명372 2023.05.13 490
37 도메인 사이트주소 접속이 안될때 DNS 캐시 플러시 하는방법 (웹개발자가 봐야하는) file 😀익명174 2023.11.19 50
36 도메인 IP DNS 전파 속도를 높이는 방법 😀익명003 2023.11.19 68
35 도메인 DNS 전파 확인 사이트 😀익명572 2023.11.19 25
34 대기 시간을 줄이기 위해 TCP를 통한 TLS 최적화 file 😀익명515 2023.10.27 1319
33 노트북 모니터 시간지나면 ubuntu 화면 자동으로 꺼지기 😀익명751 2023.08.30 311
목록
Board Pagination Prev 1 2 3 Next
/ 3