大家好,刚才看了一下网站源码,发现一个关于缓存失效的问题,导致半个小时内没有热门节点。
不知道说得对不对,如有错误,请见谅哈:
生成话题边栏时, https://github.com/huacnlee/ruby-china/blob/master/app/controllers/topics_controller.rb 判断片段缓存是否存在
def init_list_sidebar
if !fragment_exist? "topic/init_list_sidebar/hot_nodes"
@hot_nodes = Node.hots.limit(10)
end
set_seo_meta("社区")
end
然后在 views 里生成缓存 https://github.com/huacnlee/ruby-china/blob/master/app/views/topics/_sidebar.html.erb
<%= cache("topic/init_list_sidebar/hot_nodes",:expires_in => 30.minutes) do %>
<% if not @hot_nodes.blank? %>
<div class="hot_nodes nodes box">
<h2>热门节点</h2>
<ul>
<% @hot_nodes.each do |node| %>
<li><a href="<%= node_topics_path(:id => node.id) %>"><%= node.name %></a></li>
<% end %>
</ul>
</div>
<% end %>
<% end %>
在一些临界时刻,可能出现下面问题:
一般情况下,在 controller 里查数据库,在视图里渲染。但是和缓存相关时,这样做可能就有问题。