模块:Mongo::QueryCache

定义于:
lib/ Mongo/query_cache.rb

在命名空间下定义

类: 中间件

类方法摘要折叠

类方法详细信息

缓存对象

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

例子:

使用缓存执行。

QueryCache.cache { collection.find }

返回:

  • ( Object )

    区块的结果。



46
47
48
49
50
51
52
53
54
# File 'lib/ Mongo/query_cache.rb', line 46

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

clearnil

清除查询缓存。

例子:

清除缓存。

QueryCache.clear

返回:

  • ( nil )

    始终为零。



88
89
90
# File 'lib/ Mongo/query_cache.rb', line 88

def 清除
  线程.Current['[Mongo]:query_cache'] = nil
end

clear_namespace (namespace) ⇒ nil

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

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

参数:

  • namespace ( string )

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

返回:

  • ( nil )

    始终为零。



101
102
103
104
105
106
107
108
# File 'lib/ Mongo/query_cache.rb', line 101

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

enabled= (value) ⇒对象

设置是否启用缓存。

例子:

设置是否启用缓存。

QueryCache.enabled = true

参数:

  • ( true , false )

    已启用的值。



26
27
28
# File 'lib/ Mongo/query_cache.rb', line 26

def enabled=()
  线程.Current['[Mongo]:query_cache:enabled'] = 
end

已启用?true , false

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

例子:

是否启用了查询缓存?

QueryCache.enabled?

返回:

  • ( true , false )

    如果已启用缓存。



36
37
38
# File 'lib/ Mongo/query_cache.rb', line 36

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

    查询的排序规则(例如{ "区域设置" => "fr_CA" })。

  • :read_concern 哈希 | nil

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

  • :read_preference 哈希 | nil

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

  • :multi_collection (Boolean | nil)

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

返回:

  • ( Mongo::CachingCursor | nil )

    如果查询缓存中存在缓存游标,则返回该游标,否则返回 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
# File 'lib/ Mongo/query_cache.rb', line 179

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,因为存储的游标不满足
  # 查询。

  return 除非 caching_cursor_limit.nil? || (limit && caching_cursor_limit >= limit)

  caching_cursor
end

normalized_limit (limit) ⇒对象



207
208
209
210
211
212
213
214
# File 'lib/ Mongo/query_cache.rb', line 207

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

    查询的排序规则(例如{ "区域设置" => "fr_CA" })。

  • :read_concern 哈希 | nil

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

  • :read_preference 哈希 | nil

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

  • :multi_collection (Boolean | nil)

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

返回:

  • ( true )

    始终为 true。



140
141
142
143
144
145
146
147
148
# File 'lib/ Mongo/query_cache.rb', line 140

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 )

    区块的结果。



62
63
64
65
66
67
68
69
70
# File 'lib/ Mongo/query_cache.rb', line 62

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