Module: Mongo::QueryCache

Definido en:
lib/mongo/query_cache.rb

Definido bajo Namespace

clase: Middleware

Resumen del método de clase colapsar

Detalles del método de clase

.cachéObjeto

Ejecute el bloque mientras utiliza la caché de query.

Ejemplos:

Ejecutar con la caché.

QueryCache.cache { collection.find }

Devuelve:

  • (objeto)

    El resultado del bloque.



46
47
48
49
50
51
52
53
54
# Archivo 'lib/mongo/query_cache.rb', línea 46

def cache
  habilitado = ¿habilitado?
  sí mismo.habilitado = true
  begin
    rendimiento
  asegurar
    sí mismo.habilitado = habilitado
  end
end

.clearnil

Borre la caché de query.

Ejemplos:

Borrar la caché.

QueryCache.clear

Devuelve:

  • (nil)

    Siempre nulo.



88
89
90
# Archivo 'lib/mongo/query_cache.rb', línea 88

def borrar
  Hilo.Actual['[mongo]:query_cache'] = nulo
end

.clear_namespace(namespace) ⇒ nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Limpia la sección de la caché de query que almacena cursores con resultados de este namespace.

Parámetros:

  • namespace (string)

    El namespace que debe eliminarse, en el formato "base de datos.colección".

Devuelve:

  • (nil)

    Siempre nulo.



101
102
103
104
105
106
107
108
# Archivo 'lib/mongo/query_cache.rb', línea 101

def clear_namespace(namespace)
  tabla_de_cache.borrar(namespace)
  # La clave nil es donde se almacenan los cursor que podrían leer de
  # múltiples colecciones. Esta clave debe ser eliminada en cada operación de guardar
  # para evitar devolver datos obsoletos.
  tabla_de_cache.borrar(nulo)
  nulo
end

.enabled=(valor) ⇒ Objeto

Establezca si la caché está habilitada.

Ejemplos:

Establece si la caché está activada.

QueryCache.enabled = true

Parámetros:

  • Valor (true, false)

    El valor habilitado.



26
27
28
# Archivo 'lib/mongo/query_cache.rb', línea 26

def habilitado=(Valor)
  Hilo.Actual['[mongo]:query_cache:enabled'] = Valor
end

.¿activado?verdadero, falso

¿Está la caché de query habilitada en el hilo actual?

Ejemplos:

¿Está habilitada la caché de query?

QueryCache.enabled?

Devuelve:

  • (true, false)

    Si la memoria caché está habilitada.



36
37
38
# Archivo 'lib/mongo/query_cache.rb', línea 36

def ¿habilitado?
  !!Hilo.Actual['[mongo]:query_cache:enabled']
end

.obtener(**opciones) ⇒ Mongo::CachingCursor | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Para las opciones de query dadas, recuperar un cursor en caché que pueda utilizarse para obtener los resultados de query correctos, si existe en la caché.

Parámetros:

  • opciones (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :namespace (String | nil)

    El espacio de nombres de la consulta, en el formato "database_name.collection_name".

  • Selector: (Arreglo, Hash)

    El selector pasado a la query. Para la mayoría de las querys, este será un Hash, pero para agregaciones, será un arreglo que representa el pipeline de agregación. No puede ser null.

  • Omitir (Integer | nil)

    El valor de omisión de la query.

  • :sort (Hash | nil)

    El orden de los resultados de la query (por ejemplo, { name: -1 }).

  • :limit (Integer | nil)

    El valor límite de la query.

  • :proyección (Hash | nil)

    La proyección de los resultados de la query (por ejemplo, { nombre: 1 }).

  • intercalación (Hash | nil)

    La intercalación de la consulta (por ejemplo, { "localización" => "fr_CA" }).

  • :read_concern (Hash | nil)

    El nivel de consistencia de lectura de la query (por ejemplo, { level: :mayoría }).

  • read_preference (Hash | nil)

    La preferencia de lectura de la query (p. ej. {mode: :secondary}).

  • banca múltiple (Boolean | nil)

    Si los resultados de la query podrían provenir potencialmente de múltiples colecciones. Cuando sea verdadero, estos resultados se almacenarán bajo la clave del namespace nil y se borrarán con cada comando de guardado.

Devuelve:

  • (Mongo::CachingCursor | nil)

    Devuelve un CachingCursor si existe uno en la caché de query; de lo contrario, devuelve nil.



179
180
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
# Archivo 'lib/mongo/query_cache.rb', línea 179

def Obtener(**opciones)
  limit = límite normalizado(opciones[:limit])

  namespace = namespace_key(**opciones)
  caché = cache_key(**opciones)

  namespace_hash = tabla_de_cache[namespace]
  return nulo a menos que namespace_hash

  caching_cursor = namespace_hash[caché]
  return nulo a menos que caching_cursor

  caching_cursor_limit = límite normalizado(caching_cursor.vista.limit)

  # Hay dos escenarios en los que un cursor caché podría cumplir con la
  # query:
  # 1. La query tiene un límite y el cursor almacenado no tiene límite o
  #    un límite mayor.
  # 2. La query no tiene límite y el cursor almacenado no tiene límite.
  #
  # De lo contrario, devuelva nil porque el cursor almacenado no lo satisfará
  # the query.

  si limit && (caching_cursor_limit.nil? || caching_cursor_limit >= limit)
    caching_cursor
  elsif limit.nil? && caching_cursor_limit.nil?
    caching_cursor
  end
end

.normalized_limit(limit) ⇒ objeto



209
210
211
212
213
214
215
216
# Archivo 'lib/mongo/query_cache.rb', línea 209

def límite normalizado(limit)
  return nulo a menos que limit
  # Para los fines de almacenamiento en caché, un límite de 0 significa que no hay límite, ya que mongo lo trata como tal.
  return nulo si limit == 0

  # Para fines de almacenamiento en caché, un límite negativo es lo mismo que un límite positivo.
  limit.abs
end

.set(cursor, **opts) ⇒ true

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Almacena una instancia de CachingCursor en la caché de query asociada a las opciones de query especificadas.

Parámetros:

  • cursor (Mongo::CachingCursor)

    La instancia de CachingCursor que se va a almacenar.

  • opciones (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :namespace (String | nil)

    El espacio de nombres de la consulta, en el formato "database_name.collection_name".

  • Selector: (Arreglo, Hash)

    El selector pasado a la query. Para la mayoría de las querys, este será un Hash, pero para agregaciones, será un arreglo que representa el pipeline de agregación. No puede ser null.

  • Omitir (Integer | nil)

    El valor de omisión de la query.

  • :sort (Hash | nil)

    El orden de los resultados de la query (por ejemplo, { name: -1 }).

  • :limit (Integer | nil)

    El valor límite de la query.

  • :proyección (Hash | nil)

    La proyección de los resultados de la query (por ejemplo, { nombre: 1 }).

  • intercalación (Hash | nil)

    La intercalación de la consulta (por ejemplo, { "localización" => "fr_CA" }).

  • :read_concern (Hash | nil)

    El nivel de consistencia de lectura de la query (por ejemplo, { level: :mayoría }).

  • read_preference (Hash | nil)

    La preferencia de lectura de la query (p. ej. {mode: :secondary}).

  • banca múltiple (Boolean | nil)

    Si los resultados de la query podrían provenir potencialmente de múltiples colecciones. Cuando sea verdadero, estos resultados se almacenarán bajo la clave del namespace nil y se borrarán con cada comando de guardado.

Devuelve:

  • (cierto)

    Siempre verdadero.



140
141
142
143
144
145
146
147
148
# Archivo 'lib/mongo/query_cache.rb', línea 140

def Configura(cursor, **opciones)
  caché = cache_key(**opciones)
  namespace = namespace_key(**opciones)

  tabla_de_cache[namespace] ||= {}
  tabla_de_cache[namespace][caché] = cursor

  true
end

.sin cachéObjeto

Ejecute el bloque con la caché de consultas deshabilitada.

Ejemplos:

Ejecutar sin la caché.

QueryCache.uncached { collection.find }

Devuelve:

  • (objeto)

    El resultado del bloque.



62
63
64
65
66
67
68
69
70
# Archivo 'lib/mongo/query_cache.rb', línea 62

def no almacenado en la caché
  habilitado = ¿habilitado?
  sí mismo.habilitado = false
  begin
    rendimiento
  asegurar
    sí mismo.habilitado = habilitado
  end
end