想象一下,我有 5 个标签:tag1,tag2...tag5
. 如果我执行以下操作:
Rails.cache.fetch("all.tags") { Tag.all }
然后我写Rails.cache.fetch("all.tags")
了,我看到了 5 个标签。如果我添加另一个标签,并尝试再次从缓存中获取,新标签也会被加载。这是为什么?
编辑:这是我的实际代码:
Rails.cache.fetch("autocomplete.#{term}") { puts "Cache miss #{term}"; Tag.starting_with(term) }
在哪里starting_with
可以找到以某些字母开头的标签。这是我在控制台中得到的行为:
1.9.3p125 :046 > Rails.cache.read("autocomplete.ta")
Tag Load (1.0ms) SELECT "tags".* FROM "tags" WHERE (name like 'ta%')
=> [#<Tag id: 10, name: "tag1">, #<Tag id: 11, name: "tag2">, #<Tag id: 12, name: "tag3">, #<Tag id: 13, name: "tag4">]
1.9.3p125 :048 > Tag.create(name:"tag5")
(0.2ms) begin transaction
SQL (1.0ms) INSERT INTO "tags" ("name") VALUES (?) [["name", "tag5"]]
(150.9ms) commit transaction
=> #<Tag id: 14, name: "tag5">
1.9.3p125 :049 > Rails.cache.read("autocomplete.ta")
Tag Load (0.8ms) SELECT "tags".* FROM "tags" WHERE (name like 'ta%')
=> [#<Tag id: 10, name: "tag1">, #<Tag id: 11, name: "tag2">, #<Tag id: 12, name: "tag3">, #<Tag id: 13, name: "tag4">, #<Tag id: 14, name: "tag5">]