>데이터 베이스 >Redis >Redis는 데이터 일관성을 어떻게 보장합니까?

Redis는 데이터 일관성을 어떻게 보장합니까?

(*-*)浩
(*-*)浩원래의
2019-11-20 14:09:299843검색

일반적으로 Redis든 Memcache든 캐시를 사용하는 한 데이터베이스 캐시와 데이터의 일관성이 관련될 수 있습니다. 여기서는 Redis를 예로 들어보겠습니다.

Redis는 데이터 일관성을 어떻게 보장합니까?

Redis와 데이터베이스 간의 일관성을 어떻게 보장할 수 있나요? #🎜🎜 ##### 🎜🎜 ## 🎜🎜#so easy:(권장 학습:

redis video tutorial

)#) , 먼저 데이터베이스를 업데이트한 다음 삭제하세요. 은닉처. 읽을 때는 캐시를 먼저 읽고, 그렇지 않으면 데이터베이스를 읽고 데이터를 캐시에 넣은 다음 응답을 반환합니다. 얼핏 보면 일관성 문제가 아주 잘 해결된 것 같습니다. 하지만 잘 생각해보면 여전히 문제가 있다는 것을 알 수 있습니다. 데이터베이스를 먼저 업데이트하고 캐시 삭제에 실패하면 어떻게 될까요? 그런 다음 데이터베이스에 새 데이터가 있고 캐시에 이전 데이터가 있으며 데이터가 일치하지 않습니다.

개선 계획:

캐시를 먼저 삭제한 다음 데이터베이스를 업데이트하세요. 나중에 데이터베이스 업데이트가 실패하고 캐시가 비어 있어도 읽을 때 데이터베이스에서 다시 가져오기 때문에 데이터는 일관성이 있습니다.

따라서 계획은 다음과 같습니다.

업데이트할 때 캐시를 먼저 삭제한 다음 데이터베이스를 업데이트하세요.

읽을 때는 캐시를 먼저 읽고, 그렇지 않으면 데이터베이스를 읽고 데이터를 캐시에 넣은 다음 응답을 반환합니다.

이 시점에서 문제가 완전히 해결되었나요?

사실 그렇지 않습니다. 높은 동시성 시나리오에서는 데이터가 변경되고 캐시가 먼저 삭제된 다음 데이터베이스가 수정되는 상황이 발생합니다. 수정하기도 전에 요청이 들어왔습니다. 캐시를 읽으러 갔는데 캐시가 비어있는 것을 발견했습니다. 데이터베이스를 읽으러 가서 수정 전의 오래된 데이터를 읽어서 캐시에 오래된 데이터를 넣었습니다.

이후 데이터 변경 프로그램으로 데이터베이스 수정이 완료되었습니다. 그러면 끝입니다. 이때 데이터 불일치가 발생합니다...

Solution:

이 상황에서는 먼저 다음을 수행할 수 있습니다. "DB 수정" 작업을 JVM 대기열에 넣은 다음 읽기 요청이 오면 "캐시 업데이트" 작업도 순서에 따라 각 대기열에 대해 작업 스레드에 대해 동일한 JVM 대기열에 넣습니다. queue, 다음 그림과 같이 데이터 일관성을 보장하기 위해 DB를 수정한 후에 "업데이트 캐시"가 있어야 하도록 관련 작업을 순서대로 수행합니다.

Redis는 데이터 일관성을 어떻게 보장합니까?#🎜🎜 #

위 내용은 Redis는 데이터 일관성을 어떻게 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.