<commit_before># redis_page

[actionpack-page_caching](https://github.com/rails/actionpack-page_caching) 是将页面缓存到文件中，这样有两个缺点：

1. nginx web 服务器需要访问到 app 服务器生成的文件；
2. 多台 app 服务器都会生成自己的缓存文件，难以共享，NFS 等又不大稳定；

redis_page 改为将页面缓存至 redis，nginx 安装 redis 插件后即可直接使用。

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'redis_page'
```

And then execute:

    $ bundle

## Usage

### 1. Controller

生成页面缓存

```
class ProductController < ActionController::Base
  caches_redis_page :show, :new

  def show
    @product = Product.find(params[:id])
    @model_name = Product.table_name
    @model_id   = @product.id
  end
end
```

### 2. View

记录哪些实体更新时要刷新的 url，例如：Phantom 3 在首页中显示了，则记录下 Phantom 3 实体与首页的关联关系

```
- Product.all.each do |product|
  = @product.title
```

修改为：

```
- Product.all.each do |product|
  = c(@product).title
```

c 方法会记录当前页面 url

### 3. Model

更新实体后刷新所有关联的页面缓存
<commit_msg>update readme.<commit_after># redis_page

[actionpack-page_caching](https://github.com/rails/actionpack-page_caching) 是将页面缓存到文件中，这样有两个缺点：

1. nginx web 服务器需要访问到 app 服务器生成的文件；
2. 多台 app 服务器都会生成自己的缓存文件，难以共享，NFS 等又不大稳定；

redis_page 改为将页面缓存至 redis，nginx 安装 redis 插件后即可直接使用。

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'redis_page'
```

And then execute:

    $ bundle

## Usage

### 1. Controller

生成页面缓存

```
class ProductController < ActionController::Base
  caches_redis_page :show, :new

  def show
    @product = Product.find(params[:id])
    @model_name = Product.table_name
    @model_id   = @product.id
  end
end
```

### 2. View

记录哪些实体更新时要刷新的 url，例如：iPhone 在首页中显示了，则记录下 iPhone 实体与首页的关联关系

```
- Product.all.each do |product|
  = @product.title
```

修改为：

```
- Product.all.each do |product|
  = c(@product).title
```

c 方法会记录当前页面 url

### 3. Model

更新实体后刷新所有关联的页面缓存

```
class Product < ActiveRecord::Base
  include RedisPage::Sweeper
end
```

{'fraction_non_alphanumeric': 0.12804232804232804, 'fraction_numerical': 0.006349206349206349, 'mean_word_length': 4.2674094707520895, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '155165', 'n_tokens_mistral': 955, 'n_tokens_neox': 983, 'n_words': 165}