모듈: Mongo::QueryCache

다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/query_cache.rb

네임스페이스 아래에 정의됨

클래스: 미들웨어

클래스 메서드 요약 접기

클래스 메서드 세부 정보

.캐시객체

쿼리 캐시 를 사용하면서 차단 을 실행합니다.

예시:

캐시로 실행합니다.

QueryCache.cache { collection.find }

반환합니다:

  • (객체)

    차단의 결과입니다.



48
49
50
51
52
53
54
55
56
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 48

def 캐시
  활성화됨 = 활성화?
  self.활성화됨 = true
  시작
    yield
  보장
    self.활성화됨 = 활성화됨
  end
end

.clearnil

쿼리 캐시를 지웁니다.

예시:

캐시 를 지웁니다.

QueryCache.clear

반환합니다:

  • (nil)

    항상 nil입니다.



90
91
92
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 90

def 지우기
  스레드.Current["[mongo]:query_cache"] = nil
end

.clear_namespace(네임스페이스) ⇒ nil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

커서를 저장하는 쿼리 캐시 섹션을 이 네임스페이스의 결과로 지웁니다.

매개변수:

  • namespace (string)

    지울 네임스페이스 로, ' 데이터베이스 형식'입니다. 컬렉션".

반환합니다:

  • (nil)

    항상 nil입니다.



103
104
105
106
107
108
109
110
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 103

def clear_namespace(namespace)
  cache_table.삭제(namespace)
  # nil 키는 잠재적으로 읽을 수 있는 커서가 저장되는 위치입니다.
  # 여러 컬렉션. 이 키는 모든 쓰기 (write) 작업에서 지워야 합니다.
  # 오래된 데이터 반환을 방지합니다.
  cache_table.삭제(nil)
  nil
end

.enabled=(value) ⇒ 객체

캐시 활성화 여부를 설정합니다.

예시:

캐시 가 활성화된 경우 설정합니다.

QueryCache.enabled = true

매개변수:

  • value (true, false)

    활성화된 값입니다.



28
29
30
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 28

def enabled=(value)
  스레드.Current["[mongo]:query_cache:enabled"] = value
end

.활성화?true, false

현재 스레드에서 쿼리 캐시가 활성화되어 있나요?

예시:

쿼리 캐시가 활성화되어 있나요?

QueryCache.enabled?

반환합니다:

  • (true, false)

    캐시가 활성화된 경우.



38
39
40
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 38

def 활성화?
  !!스레드.Current["[mongo]:query_cache:enabled"]
end

.get(**opts) ⇒ Mongo::CashingCursor | nil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

지정된 쿼리 옵션에 대해 캐시에 있는 경우 올바른 쿼리 결과를 얻는 데 사용할 수 있는 캐시된 커서를 검색합니다.

매개변수:

  • opts (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(**opts):

  • :namespace (string | nil)

    쿼리의 네임스페이스로, 'database_name.collection_name' 형식입니다.

  • :selector (배열, 해시)

    쿼리 에 전달된 선택기입니다. 대부분의 쿼리의 경우 해시이지만 집계의 경우 집계 파이프라인 을 나타내는 배열입니다. nil이 아닐 수 있습니다.

  • :skip (정수 | nil)

    쿼리의 건너뛰기 값입니다.

  • :sort (해시 | nil)

    쿼리 결과의 순서(예: { name: -1 }).

  • :limit (정수 | nil)

    쿼리의 제한 값입니다.

  • :projection (해시 | nil)

    쿼리 결과의 프로젝션(예: { name: 1 }).

  • :collation (해시 | nil)

    쿼리의 데이터 정렬(예: { "locale" => "fr_CA" }).

  • :read_concern (해시 | nil)

    쿼리의 읽기 고려(예: { level: :majority }).

  • :read_preference (해시 | nil)

    쿼리의 읽기 설정(예: { 모드: :세컨더리 }).

  • :multi_collection (Boolean | nil)

    쿼리 결과가 잠재적으로 여러 컬렉션에서 나올 수 있는지 여부입니다. true인 경우 이러한 결과는 nil 네임스페이스 키 아래에 저장되고 모든 쓰기 명령에서 지워집니다.

반환합니다:

  • (Mongo::CashingCursor | nil)

    쿼리 캐시에 캐싱 커서가 있으면 반환하고, 그렇지 않으면 nil을 반환합니다.



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 181

def get(**opts)
  limit = normalized_limit(opts[:limit])

  _namespace_key = namespace_key(**opts)
  _cache_key = cache_key(**opts)

  namespace_hash = cache_table[_namespace_key]
  반환 nil 하지 않는 한 namespace_hash

  caching_cursor = namespace_hash[_cache_key]
  반환 nil 하지 않는 한 caching_cursor

  cache_cursor_limit = normalized_limit(caching_cursor.보기.limit)

  # 캐싱 커서가 다음 작업을 수행할 수 있는 두 가지 시나리오가 있습니다.
  # query:
  # 1. 쿼리에 제한이 있고 저장된 커서에 제한이 없거나
  # 제한이 커집니다.
  # 2. 쿼리 에는 제한이 없으며 저장된 커서 에는 제한이 없습니다.
  #
  # 그렇지 않으면 저장된 커서가 다음을 충족하지 않으므로 nil을 반환합니다.
  # 쿼리.

  만약 limit && (cache_cursor_limit.nil? || cache_cursor_limit >= limit)
    caching_cursor
  elsif limit.nil? && cache_cursor_limit.nil?
    caching_cursor
  other
    nil
  end
end

.normalized_limit(limit) ⇒ 객체



213
214
215
216
217
218
219
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 213

def normalized_limit(limit)
  반환 nil 하지 않는 한 limit
  # 캐싱을 위해 0 의 제한은 mongo 가 이를 제한 없이 처리하므로 제한이 없음을 의미합니다.
  반환 nil 만약 limit == 0
  # 캐싱을 위해 음수 한도는 양수 한도와 동일합니다.
  limit.abs
end

.설정하다(커서, **opts) ⇒ true

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

지정된 쿼리 옵션과 연결된 쿼리 캐시 에 CachingCursor 인스턴스 를 저장합니다.

매개변수:

  • cursor (Mongo::CashingCursor)

    저장할 캐싱 커서 인스턴스입니다.

  • opts (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(**opts):

  • :namespace (string | nil)

    쿼리의 네임스페이스로, 'database_name.collection_name' 형식입니다.

  • :selector (배열, 해시)

    쿼리 에 전달된 선택기입니다. 대부분의 쿼리의 경우 해시이지만 집계의 경우 집계 파이프라인 을 나타내는 배열입니다. nil이 아닐 수 있습니다.

  • :skip (정수 | nil)

    쿼리의 건너뛰기 값입니다.

  • :sort (해시 | nil)

    쿼리 결과의 순서(예: { name: -1 }).

  • :limit (정수 | nil)

    쿼리의 제한 값입니다.

  • :projection (해시 | nil)

    쿼리 결과의 프로젝션(예: { name: 1 }).

  • :collation (해시 | nil)

    쿼리의 데이터 정렬(예: { "locale" => "fr_CA" }).

  • :read_concern (해시 | nil)

    쿼리의 읽기 고려(예: { level: :majority }).

  • :read_preference (해시 | nil)

    쿼리의 읽기 설정(예: { 모드: :세컨더리 }).

  • :multi_collection (Boolean | nil)

    쿼리 결과가 잠재적으로 여러 컬렉션에서 나올 수 있는지 여부입니다. true인 경우 이러한 결과는 nil 네임스페이스 키 아래에 저장되고 모든 쓰기 명령에서 지워집니다.

반환합니다:

  • (true)

    항상 사실입니다.



142
143
144
145
146
147
148
149
150
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 142

def 세트(cursor, **opts)
  _cache_key = cache_key(**opts)
  _namespace_key = namespace_key(**opts)

  cache_table[_namespace_key] ||= {}
  cache_table[_namespace_key][_cache_key] = cursor

  true
end

.캐시되지 않은객체

쿼리 캐시를 비활성화한 상태에서 블록을 실행합니다.

예시:

캐시 없이 실행합니다.

QueryCache.uncached { collection.find }

반환합니다:

  • (객체)

    차단의 결과입니다.



64
65
66
67
68
69
70
71
72
# 파일 'build/ruby-driver-v2.19/lib/mongo/query_cache.rb', 줄 64

def 캐시되지 않은
  활성화됨 = 활성화?
  self.활성화됨 = 거짓
  시작
    yield
  보장
    self.활성화됨 = 활성화됨
  end
end