Module: Mongo::QueryCache

Definido en:
lib/mongo/query_cache.rb

Definido en el espacio de nombres

Clases: Middleware

Colapso delresumen del método de clase

Detalles del método de clase

.cachéObjeto

Ejecutar el bloque mientras se utiliza el caché de consultas.

Ejemplos:

Ejecutar con el cache.

QueryCache.cache { collection.find }

Devuelve:

  • (Objeto) -

    El resultado del bloque.



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

def cache
  habilitado = ¿activado?
  yo.habilitado = true
  begin
    rendimiento
  asegurar
    yo.habilitado = habilitado
  end
end

.claronulo

Limpiar la caché de consultas.

Ejemplos:

Limpiar la caché.

QueryCache.clear

Devuelve:

  • (nil)

    Siempre nulo.



90
91
92
# Archivo 'lib/mongo/query_cache.rb', línea 90

def borrar
  Hilo.actual["[mongo]:caché de consultas"] = nulo
end

.clear_namespace(espacio de nombres) ⇒ nil

Este método forma parte de una API privada. Debe evitarlo 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 (Cadena) -

    El espacio de nombres que se va a borrar, en el formato “database.collection”.

Devuelve:

  • (nil)

    Siempre nulo.



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

def espacio de nombres claro(namespace)
  tabla_de_caché.borrar(namespace)
  # La clave nula es donde se almacenan los cursores que potencialmente podrían leer desde
  # Múltiples colecciones. Esta clave debe borrarse en cada operación de escritura.
  # para evitar devolver datos obsoletos.
  tabla_de_caché.borrar(nulo)
  nulo
end

.habilitado=(valor) ⇒ Objeto

Establece si el caché está habilitado.

Ejemplos:

Establecer si el caché está habilitado.

QueryCache.enabled = true

Parámetros:

  • valor (verdadero,falso)

    El valor habilitado.



28
29
30
# Archivo 'lib/mongo/query_cache.rb', línea 28

def habilitado=(valor)
  Hilo.actual["[mongo]:query_cache:habilitado"] = valor
end

.habilitado?verdadero, falso

¿Está habilitado el caché de consultas en el hilo actual?

Ejemplos:

¿Está habilitada la caché de consultas?

QueryCache.enabled?

Devuelve:

  • (verdadero,falso)

    Si el caché está habilitado.



38
39
40
# Archivo 'lib/mongo/query_cache.rb', línea 38

def ¿activado?
  !!Hilo.actual["[mongo]:query_cache:habilitado"]
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Para las opciones de consulta dadas, recupere un cursor almacenado en caché que pueda usarse para obtener los resultados de consulta correctos, si existe uno en el caché.

Parámetros:

  • opta (Hash)

    un conjunto personalizable de opciones

Opciones Hash (**opts):

  • :namespace (String | nil)

    El espacio de nombres de la consulta, en el formato “nombre_de_base_de_datos.nombre_de_colección”.

  • :selector (Matriz,Hash)

    El selector pasado a la consulta. Para la mayoría de las consultas, será un hash, pero para las agregaciones, será un array que representa la secuencia de agregación. No puede ser nulo.

  • :saltar (Integer | nil)

    El valor de omisión de la consulta.

  • :sort (Hash | nulo)

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

  • :limit (Integer | nil)

    El valor límite de la consulta.

  • :proyección (Hash | nulo)

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

  • :colación (Hash | nulo)

    La intercalación de la consulta (por ejemplo, { “locale” => “fr_CA” }).

  • :read_concern (Hash | nulo)

    La preocupación de lectura de la consulta (por ejemplo, { level: :majority }).

  • :preferencia de lectura (Hash | nulo)

    La preferencia de lectura de la consulta (por ejemplo, { mode: :secondary }).

  • :multi_colección (Boolean | nil)

    Si los resultados de la consulta podrían provenir de varias colecciones. Si es verdadero, estos resultados se almacenarán en la clave de espacio de nombres nulo y se borrarán con cada comando de escritura.

Devuelve:

  • (Mongo::CachingCursor | nulo ) —

    Devuelve un CachingCursor si existe uno en la caché de consultas; de lo contrario, devuelve 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
# Archivo 'lib/mongo/query_cache.rb', línea 181

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

  _clave_de_espacio_de_nombres = clave_de_espacio_de_nombres(**opta)
  _clave_de_caché = cache_key(**opta)

  namespace_hash = tabla_de_caché[_clave_de_espacio_de_nombres]
  return nulo a no ser que namespace_hash

  caching_cursor = namespace_hash[_clave_de_caché]
  return nulo a no ser que caching_cursor

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

  # Hay dos escenarios en los que un cursor de almacenamiento en caché podría cumplir la función
  # query:
  # 1. La consulta tiene un límite y el cursor almacenado no tiene límite o
  # un límite mayor.
  # 2. La consulta no tiene límite y el cursor almacenado no tiene límite.
  #
  # De lo contrario, devuelve nil porque el cursor almacenado no satisfará
  # la consulta.

  Si limit && (caching_cursor_limit.nil? || caching_cursor_limit >= limit)
    caching_cursor
  elsif limit.nil? && caching_cursor_limit.nil?
    caching_cursor
  else
    nulo
  end
end

.normalized_limit(límite) ⇒ Objeto



213
214
215
216
217
218
219
# Archivo 'lib/mongo/query_cache.rb', línea 213

def límite normalizado(limit)
  return nulo a no ser que limit
  # Para 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

.establecer(cursor, **opciones) ⇒ verdadero

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Almacene una instancia de CachingCursor en la caché de consultas asociada con las opciones de consulta especificadas.

Parámetros:

  • cursor (Mongo::CachingCursor)

    La instancia de CachingCursor para almacenar.

  • opta (Hash)

    un conjunto personalizable de opciones

Opciones Hash (**opts):

  • :namespace (String | nil)

    El espacio de nombres de la consulta, en el formato “nombre_de_base_de_datos.nombre_de_colección”.

  • :selector (Matriz,Hash)

    El selector pasado a la consulta. Para la mayoría de las consultas, será un hash, pero para las agregaciones, será un array que representa la secuencia de agregación. No puede ser nulo.

  • :saltar (Integer | nil)

    El valor de omisión de la consulta.

  • :sort (Hash | nulo)

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

  • :limit (Integer | nil)

    El valor límite de la consulta.

  • :proyección (Hash | nulo)

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

  • :colación (Hash | nulo)

    La intercalación de la consulta (por ejemplo, { “locale” => “fr_CA” }).

  • :read_concern (Hash | nulo)

    La preocupación de lectura de la consulta (por ejemplo, { level: :majority }).

  • :preferencia de lectura (Hash | nulo)

    La preferencia de lectura de la consulta (por ejemplo, { mode: :secondary }).

  • :multi_colección (Boolean | nil)

    Si los resultados de la consulta podrían provenir de varias colecciones. Si es verdadero, estos resultados se almacenarán en la clave de espacio de nombres nulo y se borrarán con cada comando de escritura.

Devuelve:

  • (verdadero) -

    Siempre verdadero.



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

def conjunto(cursor, **opta)
  _clave_de_caché = cache_key(**opta)
  _clave_de_espacio_de_nombres = clave_de_espacio_de_nombres(**opta)

  tabla_de_caché[_clave_de_espacio_de_nombres] ||= {}
  tabla_de_caché[_clave_de_espacio_de_nombres][_clave_de_caché] = cursor

  true
end

.sin almacenar en caché ⇒ Objeto

Ejecutar el bloque con el caché de consultas deshabilitado.

Ejemplos:

Ejecutar sin caché.

QueryCache.uncached { collection.find }

Devuelve:

  • (Objeto) -

    El resultado del bloque.



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

def sin almacenar en caché
  habilitado = ¿activado?
  yo.habilitado = false
  begin
    rendimiento
  asegurar
    yo.habilitado = habilitado
  end
end