模块:Mongo::QueryCache

定义于:
build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb

在命名空间下定义

类: 中间件

类方法摘要折叠

类方法详细信息

缓存对象

在使用查询缓存时执行区块。

例子:

使用缓存执行。

QueryCache.cache { collection.find }

返回:

  • ( Object )

    区块的结果。



48
49
50
51
52
53
54
55
56
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第48行

def 缓存
  enabled = 已启用?
  self.enabled = true
  开始
    产量
  确保
    self.enabled = enabled
  end
end

clearnil

清除查询缓存。

例子:

清除缓存。

QueryCache.clear

返回:

  • ( nil )

    始终为零。



90
91
92
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第90行

def 清除
  线程.Current[" [mongo]:query_cache "] = nil
end

clear_namespace (namespace) ⇒ nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

清除查询缓存中存储游标和来自此命名空间的结果的部分。

参数:

  • namespace ( string )

    要清除的命名空间,格式为“数据库.集合”。

返回:

  • ( nil )

    始终为零。



103
104
105
106
107
108
109
110
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第103行

def clear_namespace(namespace)
  cache_table.删除(namespace)
  # nil 键是存储游标的位置,这些游标可能会读取
  # 多个集合。 每次写入操作都应清除该键
  # 以防止返回过时的数据。
  cache_table.删除(nil)
  nil
end

enabled= (value) ⇒对象

设置是否启用缓存。

例子:

设置是否启用缓存。

QueryCache.enabled = true

参数:

  • ( true , false )

    已启用的值。



28
29
30
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第28行

def enabled=()
  线程.Current[" [mongo]:query_cache:enabled "] = 
end

已启用?true , false

当前线程是否启用了查询缓存?

例子:

是否启用了查询缓存?

QueryCache.enabled?

返回:

  • ( true , false )

    如果已启用缓存。



38
39
40
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第38行

def 已启用?
  !!线程.Current[" [mongo]:query_cache:enabled "]
end

get (**opts) ⇒ Mongo::CachingCursor | Mongo::CachingCursor nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

对于给定的查询选项,检索可用于获取正确查询结果的缓存游标(如果缓存中存在游标)。

参数:

  • opts (哈希)

    一组可自定义的选项

选项哈希 ( **opts ):

  • :namespace ( string | nil )

    查询的命名空间,格式为“database_name.collection_name”。

  • :selector 数组哈希

    传递给查询的选择器。 对于大多数查询,这将是一个哈希,但对于聚合,这将是一个表示聚合管道的数组。 不得为 nil。

  • :skip ( Integer | nil )

    查询的跳过值。

  • :sort 哈希 | nil

    查询结果的顺序(例如 { name: - 1 })。

  • :limit ( Integer | nil )

    查询的限值。

  • :projection 哈希 | nil

    查询结果的投影(例如 { name: 1 })。

  • :collation 哈希 | nil

    查询的排序规则(例如 { “locale” => “fr_CA” })。

  • :read_concern 哈希 | nil

    查询的读关注(例如 { level: :majority })。

  • :read_preference 哈希 | nil

    查询的读取偏好(例如 { mode: :secondary })。

  • :multi_collection (Boolean | nil)

    查询结果是否可能来自多个集合。 如果为 true,这些结果将存储在 nil 命名空间键下,并在每个写入命令时清除。

返回:

  • ( Mongo::CachingCursor | 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
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第181行

def 获取(**opts)
  limit = normalized_limit(opts[:limit])

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

  namespace_hash = cache_table[_namespace_key]
  return nil 除非 namespace_hash

  caching_cursor = namespace_hash[_cache_key]
  return nil 除非 caching_cursor

  caching_cursor_limit = normalized_limit(caching_cursor.查看.limit)

  # 缓存游标在两种情况下可以满足
  # query:
  # 1 . 查询有限制,存储的游标没有限制或
  # 更大的限制。
  # 2 . 查询没有限制,存储的游标也没有限制。
  #
  # 否则,返回 nil,因为存储的游标不满足
  # 查询。

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

normalized_limit (limit) ⇒对象



213
214
215
216
217
218
219
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第213行

def normalized_limit(limit)
  return nil 除非 limit
  # 出于缓存目的,限制为 0 意味着没有限制,因为mongo也是如此对待的。
  return nil if limit == 0
  # 就缓存而言,负限值与正限值相同。
  limit.abs
end

设立 (游标, **opts) ⇒ true

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

将 CachingCursor实例存储在与指定查询选项关联的查询缓存中。

参数:

  • cursor ( Mongo::CachingCursor )

    要存储的 CachingCursor 实例。

  • opts (哈希)

    一组可自定义的选项

选项哈希 ( **opts ):

  • :namespace ( string | nil )

    查询的命名空间,格式为“database_name.collection_name”。

  • :selector 数组哈希

    传递给查询的选择器。 对于大多数查询,这将是一个哈希,但对于聚合,这将是一个表示聚合管道的数组。 不得为 nil。

  • :skip ( Integer | nil )

    查询的跳过值。

  • :sort 哈希 | nil

    查询结果的顺序(例如 { name: - 1 })。

  • :limit ( Integer | nil )

    查询的限值。

  • :projection 哈希 | nil

    查询结果的投影(例如 { name: 1 })。

  • :collation 哈希 | nil

    查询的排序规则(例如 { “locale” => “fr_CA” })。

  • :read_concern 哈希 | nil

    查询的读关注(例如 { level: :majority })。

  • :read_preference 哈希 | nil

    查询的读取偏好(例如 { mode: :secondary })。

  • :multi_collection (Boolean | nil)

    查询结果是否可能来自多个集合。 如果为 true,这些结果将存储在 nil 命名空间键下,并在每个写入命令时清除。

返回:

  • ( true )

    始终为 true。



142
143
144
145
146
147
148
149
150
# File 'build/Ruby-driver-v 2.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 }

返回:

  • ( Object )

    区块的结果。



64
65
66
67
68
69
70
71
72
# File 'build/Ruby-driver-v 2.19 /lib/mongo/query_cache.rb', 第64行

def 未缓存
  enabled = 已启用?
  self.enabled = false
  开始
    产量
  确保
    self.enabled = enabled
  end
end