schickling/laravel-cash

使用 memcached 和 nginx 为您的 laravel 应用提供简单易用的缓存层。

0.3.1 2014-01-15 12:24 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:44:14 UTC


README

使用 memcached 和 nginx 为您的 laravel 应用提供简单易用的缓存层。响应时间提高约 400%。

工作原理

该软件包使用 URL 作为键,在 memcached 中缓存对 GET 请求的响应。后续请求将由 nginx 直接提供缓存内容,无需运行 PHP。写入操作可以轻松使缓存失效。

特性

  • 易于设置和使用
  • 自定义失效规则
  • 自动缓存填充
  • 缓存预热

依赖项

快速设置

  1. 将以下内容添加到您的 composer.json 文件中,并运行 composer update

    {
        "require": {
            "schickling/laravel-cash": "dev-master"
        }
    }
  2. Schickling\Cash\CashServiceProvider 添加到您的 config/app.php 文件中

  3. 调整您的 nginx vhost (更多配置)

    upstream memcached {
        server 127.0.0.1:11211;
        keepalive 1024;
    }
    
    upstream laravel {
        server 127.0.0.1:9999;
    }
    
    server {
        listen *:80;
        server_name myapp.dev;
    
        root /path/to/your/public;
        index index.php;
    
        rewrite ^/(.*)$ /index.php?/$1 last;
    
        location ~ \.php$ {
            default_type "application/json";
            if ($request_method = GET) {
                set $memcached_key laravel:$request_uri;
                memcached_pass laravel;
                error_page 404 502 = @nocache;
            }
            if ($request_method != GET) {
                fastcgi_pass laravel;
            }
        }
    
        location @nocache {
            fastcgi_pass laravel;
        }
    }

使用方法

为路由添加缓存过滤器

'after' => 'cash' 过滤器添加到您希望缓存的 GET 路由中。也适用于路由组。

Route::get('users', array('after' => 'cash', function()
{
	return User::all();
}));

定义失效规则

在您的 routes.php 文件中添加以下语法的规则。$routeToInvalidate 参数可以是字符串或数组,并始终描述 GET 路由。

Cash::rule($httpMethod, $triggerRoute, $routesToInvalidate);

假设您有一个缓存的 GET users 路由来获取所有用户,以及一个 POST users 路由来创建新用户。您的目标是当创建新用户时使 GET users 缓存失效。

Cash::rule('POST', 'users', 'users');
多个路由缓存
Cash::rule('POST', 'users', array('users', 'premium/users'));
动态规则
动态触发路由
Cash::rule('POST', 'users/.*/photos', 'photos');
动态失效路由
Cash::rule('POST', 'photos', 'photos/*');

清除缓存

简单地重启 memcached。

即将推出(请通过 pull request 贡献)

  • 支持命名路由
  • 支持路由组作用域中的规则
  • 更精确的层次结构失效
  • Apache 支持
  • Memcache 支持
  • 缓存预热
  • 单独的缓存预热