Module: Mongo::QueryCache

Definido en:
lib/mongo/query_cache.rb

Definido bajo Namespace

Clases: Middleware

Resumen del método de clase colapsar

Detalles del método de clase

.cachéObjeto

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

Ejemplos:

Ejecutar con la caché.

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 = ¿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.



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

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

.clear_namespace(namespace) ⇒ 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 (string)

    El namespace que se debe borrar, en el formato “base de datos.colección”.

Devuelve:

  • (nil)

    Siempre nulo.



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

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 (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

.¿activado?verdadero, falso

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

Ejemplos:

¿Está habilitada la caché de query?

QueryCache.enabled?

Devuelve:

  • (verdadero,falso)

    Si el caché está habilitado.



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

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

.obtener(**opciones) ⇒ Mongo::CachingCursor | 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.

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:

  • opta (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :namespace (String | nil)

    El namespace de la query, 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 consulta.

  • :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 }).

  • :colación (Hash | nil)

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

  • :read_concern (Hash | nil)

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

  • :preferencia de lectura (Hash | nil)

    La preferencia de lectura de la consulta (por ejemplo, { 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.



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])

  namespace = clave_de_espacio_de_nombres(**opta)
  caché = cache_key(**opta)

  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 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 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á
  # 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(limit) ⇒ 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 menos 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

.set(cursor, **opts) ⇒ true

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 que se va a almacenar.

  • opta (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :namespace (String | nil)

    El namespace de la query, 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 consulta.

  • :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 }).

  • :colación (Hash | nil)

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

  • :read_concern (Hash | nil)

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

  • :preferencia de lectura (Hash | nil)

    La preferencia de lectura de la consulta (por ejemplo, { 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.



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

def conjunto(cursor, **opta)
  caché = cache_key(**opta)
  namespace = clave_de_espacio_de_nombres(**opta)

  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 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 no almacenado en la caché
  habilitado = ¿habilitado?
  sí mismo.habilitado = false
  begin
    rendimiento
  asegurar
    sí mismo.habilitado = habilitado
  end
end