개발자 주의: 캐시 지우는 것을 잊지 마세요!

3503 단어 rubycacherails
이 글은 코드 라이브러리 개발에 기여하고자 하는 사람들을 위해 쓴 것입니다. 캐시가 처리 중인 특성/버그에 어떻게 영향을 미치는지에 대한 주석이 필요합니다.
fastly가 테두리 캐시에 의존하는 관건적인 서비스로 분류된 것을 제외하고는 캐시에 대한 정보가 많지 않습니다.이론적으로 말하자면 이 작은 주석은 경험이 풍부한 rails 개발자에게 충분한 정보를 제공하여 그들이 무엇을 고려해야 하는지, 개발자에게 내비게이션 캐시를 어떻게 해야 하는지 알게 하지만 초보 개발자들을 완전히 당황하게 할 수 있다.
만약 당신이 나와 같은 훈련 캠프 졸업생이라면, 캐시는 당신의 수업에 전혀 나타나지 않을 것이다. 이것은 당신의 응용 프로그램이 대량의 데이터를 제공하기 전에, 캐시는 당신이 진정으로 고려해야 할 일이 아니기 때문이다.따라서 캐시의 일반적인 개념에 익숙하지 않다면 Kevin Kononenko의 이 훌륭한 글을 읽어 보십시오.


너무 좋아요.
DEV에서는 컨텐츠 제공 네트워크를 통한 빠른 캐시에 크게 의존합니다.이것은 dev.to 요청이 원본 서버에 도착하지 않고 위치에서 가장 가까운 프록시 서버 (CDN에서 제공하는 서버) 를 명중시키는 것을 의미합니다.요청이 실제로 원점에 도달해야 하는 경우, Rails에서 제공하는 기존 캐시 기능에 의존합니다. 이 기능들은 정적 기존 정보를 저장합니다.이것은 브라우저, CDN, Rails가 함께 작업하여 새 자산의 기본 코드에 직접 들어가기 전에 요청을 완료한다는 것을 의미한다.Browser Cache > CDN > Rails Cache > Underlying Code이것은 모두 매우 전통적이기 때문에 FastlyRails 문서는 더 많은 정보를 이해할 수 있는 절호의 자원이다.
DEV를 개발하고 있다면 "캐시해야 합니까? 그렇다면 어떤 수준입니까?"아니면 반대로 "캐시를 지워야 합니까?"본문에서 우리는 후자를 주목할 것이다.
최근에 나는 두 사용자를 통합하는 기능을 구축하고 있다. 때로는 사람들이 각각 트위터와github를 통해 로그인하고 (링크가 아니라) 두 계정을 만든다.매우 간단한 과정:
  • 모든 활동을 계정 B에서 계정 A로 이동합니다.
  • 계정 삭제 B.
  • 상술한 조작을 끝낸 후에 내가 계정 A의 프로필에 접근할 때 이 사용자의 모든 합병 활동을 볼 수 있다고 합리적으로 가정할 수 있다.아니!계좌 B의 모든 데이터가 삭제되었다는 생각에 나는 잠시 당황했다.사실은 내 코드에서 Fastly 캐시를 지우는 신호를 보내지 않았기 때문에 새 데이터를 받지 못했다는 것을 증명한다.예, 사용자 프로필 (/사용자 이름) 이 캐시되어 있습니다. 이것은 이 페이지의 내용이 변경될 때마다 캐시를 지워야 한다는 것을 의미합니다.
    우리는 캐시를 파괴하는 대상이 하나 있는데, 우리의 빠른 캐시를 쉽게 제거할 수 있고, 정기적으로 제거해야 할 항목을 제거할 수 있는 편리한 방법이 있다.이것은 모든 논리를 처리하는 파일입니다: app/labor/cache_buster.rb.사용자 프로필에서 캐시를 지우는 방법은 다음과 같습니다. CacheBuster.new.bust("/jess").
    Fastly에서 계정 A의 사용자 프로필 경로를 지울 때 통합된 모든 활동을 보고 싶습니다.이것은 거의 사실이다. 글, 휘장, 평론이 나왔지만, 그 중 하나의 사교 아이콘이 잃어버렸다. (구체적으로 말하면 계정 B의 최초의 로그인 방법이다.)사실 우리는 저급 Rails를 사용하여 사용자 데이터를 캐시합니다."저장"리셋을 실행하지 않았습니다. 계정 A의 프로필을 업데이트할 때, 이 리셋은 캐시를 지웁니다.이 Rails 캐시를 지우려면 사용자를 정식으로 업데이트해야 합니다. 예를 들어 user.touch 보통 이렇게 합니다.
    개발 중에 캐시를 신속하게 실행할 수는 없지만 전환bin/rails dev:cache을 통해 간단한 rake 작업을 사용하여 Rail의 캐시를 실행할 수 있습니다.
    마지막 일: 이외에 우리는 CounterCulture의gem를 사용했다.이gem는 사용자의 관련 계수를 추적합니다. 예를 들어 articles_count, 이것은 우리가 더 빨리 조회할 수 있도록 도와줍니다.때때로 이 계수는 동기화되지 않습니다(예를 들어 사용자 활동을 업데이트할 때 정확한 리셋이 실행되지 않았습니다...).만약 이런 상황이 발생한다면, 당신은 직접 계수를 업데이트할 수 있습니다.예:
    user.articles_count = user.articles.size
    
    이것은 우리의 캐시 정책에 대한'반향적'관점이지만, 나는 그것이 개발 응용 프로그램에 대한 견해를 제공할 수 있기를 바란다.

    좋은 웹페이지 즐겨찾기