缓存cache(5.2新:redis): gem faker (6600✨) 命令行工具curl(系统内置,可在git上看到文档)
前置种子
https://github.com/stympy/faker
如有个Company模型,含有一个name属性。弄出三十个实例变量:
Faker::Company是内置的类。
unique方法让name的值都是唯一的。
SecureRandom是一个module,random_number(100)在100内生成随机整数。
HTTP Caching
目的:加快下载速度,如果已经从服务器下载了网页,并得知没有变化,那么就不从新下载网页
网页浏览器知道当它下载了一个resource(a web page),会把它放入它的cache。在第二次请求request,浏览器传递这个信息给服务器:If-Modified-Since: header 。服务器会把这个信息和相关文件比较,然后发送新版本或者返回一个HTTP 304 not Modified file 作为response.
fresh_when方法
在控制器中添加:
#也可以简写etag: @company
看log:显示:
第一次Completed 200 OK in 34ms (Views: 31.6ms | ActiveRecord: 0.5ms)
再刷新: 304 Not Modified in 1ms (ActiveRecord: 0.1ms)
curl is a tool to transfer data from or to a server
curl [option/url]
$ curl -I http://localhost:3000/companies/1
option:
-I,仅仅显示头部。
-i, -include 显示Include the HTTP response headers in the output
-v, 显示几乎全部信息,包括网页的html 。对debug有帮助.
当前用户:current_user and other potential parameters
ActionController::ConditionalGet::ClassMethods#etag
给etag增加指定的条件,当考虑是否更新时,看是否是当前用户的关联对象。
#在具体的控制器中,首行写上也可以。
Stale?方法
和fresh_when的区别是可以指定respond_to的格式,如json.
expires_in 方法
用于设置缓存过期的时间。expires_in(20.minutes)就是20分钟后过期。
def show
expires_in 2.minutes
fresh_when @company, public: true
end
$ curl -I <url>
fragment cache
使用碎片缓存可以单独缓存部分视图页面。碎片缓存和HTTP caching已经page caching是可以一起使用的。
$ rails dev:cache
#⚠️在开发模块手动打开碎片缓存功能。而在产品模式,碎片缓存是默认使用的。
把整个表格都包含进去 cache('table_of_all_companies' )
<% cache('name_of_cache') do %>
[...]
<% end %>
Deleting the Fragment Cache
如果使用碎片缓存的话,在after_create, after_update, before_destroy上清除对应的缓存,使用AbstractController::caching::fragment expire_fragment方法
class Employee < ActiveRecord::Base ⚠️Company 模块也要➕上
belongs_to :company, touch: true
after_create :expire_cache
after_update :expire_cache
before_destroy :expire_cache
def expire_cache
ActionController::Base.new.expire_fragment('table_of_all_companies')
end
end
扩展:
ActionControllers是web请求的核心。它们由多个action组成,在request中执行并渲染一个模版或者redirects to 另外的action。
默认, ApplicationController继承自ActionController::Base。所有其他的controller继承它。
所有的methods都由2个基本的模式: Get-and-show, do-and-redirect.
备注:我觉得无需使用这个。因为fresh_when中会判断是否发生变化。 的确,见下节
缓存cache(5.2新:redis): gem faker (6600✨) 命令行工具curl(系统内置,可在git上看到文档)的更多相关文章
- Redis进阶实践之十四 Redis-cli命令行工具使用详解
转载来源:http://www.cnblogs.com/PatrickLiu/p/8508975.html 一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redi ...
- Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分
一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redis的东西要看的都差不多看完了.网上的东西也不多了.剩下来就看看官网的东西吧,一遍翻译,一遍测试. ...
- MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具
这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...
- 使用命令行工具npm新创建一个vue项目
使用vue开发项目的前期工作可以参考前面写的: Vue环境搭建及node安装过程整理 Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的 ...
- Redis 命令行工具能这样用你知道了吗?
我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis 数据结构手工操作程序,但是它背后强大的功能绝大多数同学可能闻所未闻.本节我们一起来挖 ...
- Redis - 命令行工具
使用Redis内置的命令行工具 redis-cli一些便捷的命令: 1.执行单条命令 平时在访问 Redis 服务器,一般都会使用 redis-cli 进入交互模式,然后一问一答来读写服务器,这种情况 ...
- Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)
一.介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分.话不多说,开始我们今天的讲解.如果要想看第一篇文章,地址如下:http: ...
- Azure CLI 2.0-Azure新命令行工具介绍
Azure CLI 2.0 是 Azure 的新命令行体验,用于管理 Azure 资源. 可以将其安装在 macOS.Linux 和 Windows 上,然后从命令行运行它. Azure CLI 2. ...
- 重磅!GitHub官方开源新命令行工具
近日,GitHub 发布命令列工具 (Beta) 测试版,官方表示,GitHub CLI提供了一种更简单.更无缝的方法来使用Github.这个命令行工具叫做GitHub CLI,别名gh. 现在,你就 ...
随机推荐
- couldn't connect to host
“couldn't connect to host” 这样的错误可能是主机不可到达,或者端口不可到达. ping OK只代表主机可以到达. 端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端 ...
- 关于typecho,404页面错误
之前用typecho,但是没发现404错误页面; 现在只要发布文章就提示404页面错误. 解决方法 点击发布日期,将发布日期的分向后拖动几分钟: 然后发布,发现404错误不见了: 我是遇到这种情况了不 ...
- pta 天梯地图 (Dijkstra)
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...
- Mysql的存储引擎和索引
可以说数据库必须有索引,没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能忍受的.我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可.当数据 ...
- 【mlflow】打包:npm run build + python setup.py sdist
mlflow是一个开源机器学习平台 最近需要使用一个它的最新版本,但是这个最新版本没有git包,无法通过pip install安装,需要打包安装. 打包完之后在项目的dist文件夹中有打包后的压缩包, ...
- Python开发【笔记】:探索Python F-strings
F-strings 在python3.6.2版本中,PEP 498 提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings(主要因为这种字符串的第一个字母是f) 简 ...
- Python开发【笔记】:接口
接口 什么是接口 ? 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部 ...
- Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制
Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制 http://w ...
- js-template-art【二】语法
参看地址 一.模板语法 1.变量使用与输出 <% if (user) { %> <h2><%= user.name %></h2> <% } %& ...
- 关于RxJava背压
http://flyou.ren/2017/04/05/%E5%85%B3%E4%BA%8ERxJava%E8%83%8C%E5%8E%8B/?utm_source=tuicool&utm_m ...