设为首页 加入收藏

TOP

Rails.cache相关知识(二)
2019-08-15 00:10:14 】 浏览:166
Tags:Rails.cache 相关 知识
3/car/cars"

以后每次再去调用该index,你会发现redis的monitor中都是显示如下信息:说明缓存成功,不再每次去方法中执行,而是直接从redis中去取。

1560408837.780396 [2 [::1]:54380] "get" "views/localhost:3003/car/cars"
1560408838.140465 [2 [::1]:54380] "get" "views/localhost:3003/car/cars"
1560408838.667096 [2 [::1]:54380] "get" "views/localhost:3003/car/cars"

过期时间的问题:

如果你没有设置过期时间,那么他的过期时间使用redis设置的过期时间。

如果想查看过期时间,进入redis控制台,然后选择你使用的数据库id,例如(查出来的时间是以秒为单位)

    myMacBook-Pro redis-cli
    127.0.0.1:6379>select 2
    OK
    127.0.0.1:6379[2]> TTL "views/localhost:3003/car/cars"
    (integer) 13620
    127.0.0.1:6379[2]>=
如果想自己设置过期时间,可以直接查看gem 'actionpack-action_caching'这个gem的文档
  • 片段缓存
    片段缓存是rails中最常用的一种缓存方式,主要是在页面中进行局部缓存。

     在index.html.erb页面中
     <% cache 'test_index' do %>
     <%= Time.now.strftime('%Y-%m-%d %H:%M:%S.%L') %>
    <% end %>

    这个其实和方法缓存的监控的方式一样,你会发现会生成"views/car/cars/index:61696bc621e5ee68531c6a58dfaf4da3/test_index"这样的key,同时也能查到过期时间。
    每次你去刷新页面,都会在redis中去请求这个key值对应的value值。
    如果想自己设置过期时间为2小时,可以这样设置

    <% cache 'test_index',expires_in: 2.hours do %>
     <%= Time.now.strftime('%Y-%m-%d %H:%M:%S.%L') %>
    <% end %>

    如果你想让这个"views/car/cars/index:61696bc621e5ee68531c6a58dfaf4da3/test_index"的key失效,你可以使用expire_fragment('views/car/cars/index:61696bc621e5ee68531c6a58dfaf4da3/test_index') ,但是在实际应用中我们无法查到这个key的具体值,所以我们可以这样设置:

    <% cache 'test_index', {skip_digest: true} do %>
     <%= Time.now.strftime('%Y-%m-%d %H:%M:%S.%L') %>
    <% end %>

    这样’test_index’将会被作为cache key被缓存起来,如果想要使他失效,只要在对应的action里调用就expire_fragment('test_index')就行,如果不加 {skip_digest: true},那么是无法直接调用expire_fragment('test_index')的。
    可以简单的查看一下生成这个片段name的源码:

    def cache_fragment_name(name = {}, skip_digest: nil, virtual_path: nil)
          if skip_digest
            name
          else
            fragment_name_with_digest(name, virtual_path)
          end
    end
    可以很明显的看出,如果skip_digest是true,将直接返回页面中写的name。
  • 首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇经典例题 下一篇Ruby中星号打包解包操作

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目