laravelredis缓存
1. php redis 什么时候用
默认情况下,Redis 服务会提供 16 个数据库,PHPHub 使用 0 号数据库来做缓存,1 号数据库来做会话存储 - Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库_PHPHub
队列的话使用 Beanstalkd
最常用的就是缓存、队列,当然还有很多其它的,如归并计算、去重等。
我根据自己使用Redis的场景及个人最佳实践,整理了一篇文章,redis应用场景与最佳实践
比如网站抢购时,可以使用redis做队列,可以使用redis来代替session功能,还有可以拿redis中的无序集合做socket的客户端id存储。
2. 如何关闭Laravel的缓存
在设置里,或者直接进手机的设置--应用程序--Laravel--清除缓存或者数据,清除数据就连登陆信息一并清楚了,这点注意。
3. laravel redis怎么清除缓存
1.Session:
修改.evn文件:
乱坦运SESSION_DRIVER:redis
(如果还不行的话,修改config/session.php的driver)
2.缓存修改为哗梁redis
注意:使用 Laravel 的 Redis 缓信链存之前,你需要通过 Composer 安装 predis/predis 包(~1.0)。
1.修改.evn文件中redis的配置信息
4. laravel的cache tags是做什么用的
Laravel 缓存系统支持多种驱动方式,主要包括 file, database, Redis, Memcached 等。
当使用 Redis 作为缓存驱动时,可以使用 缓存标签(Cache tags)。 缓存标签主要是为了方便对缓存进行分组管理的。比如,我们可以对打上了某一个分组tag的多个缓存进行删除(flush)。
注意: 缓存标签目前不支持 `file` 或 `database` 缓存驱动。
5. 缓存策略的选择
适合缓存的内容
1. 不变的图像,如logo,图标等
2. js、css静态文件
3. 可下载的内容,媒体文件
适合协商缓存
1. HTML文件
2. 经常替换的图片
3. 经常修改的js、css文件,js、css文件的加载可以加入文件的签名来拒绝缓存,如‘index.css?签名’,‘index.签名.js’
不建议缓存的内容
1. 用户隐私等敏感数据
2. 经常改变的API数据接口
NGINX配置缓存策略
本地缓存配置
1. add_header指令:添加状态码为2XX和3XX的响应头信息,设置代码add_header name value [always];,可以设置Pragma、Expires、Cache-Control,可以继承
2. expires指令:通知浏览器过期时长,设置代码expires time;
3. Etag指令:指定签名,设置代码etag on|off,默认on
前端代码和资源压缩
优势
1. 让资源文件更小,加快文件在网络中的传输,让网页更快的展现,降低带宽和流量的开销
压缩方式
1. js、css、图片、html代码的压缩
2. gzip压缩
gzip配置
gzip on|off; #是否开启gzipgzip_buffers 32 4K|16 8K; #缓冲(在内存中缓存几块?每块多大)gzip_comp_level [1-9] #推荐6,压缩级别(级别越高,压得越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA,什么样的Uri不进行gzip
gzip_min_length 200 #开始压缩的最小长度
gzip_http_version 1.0|1.1 #开始压缩的http协议版本
gzip_proxied #设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml image/png #对哪些类型的文件压缩,如txt、xml、css
gzip_vary on|off #是否传输gzip压缩标志
CDN加速
定义
1. CDN的全称content delivery network,内容分发网络
2. 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
3. 在网络各处放置节点服务器所构成的有的互联网基础之上的一层智能虚拟网络
4. CDN系统能够实现地根据网络流量和各节点的连接、负载状况以及到用户距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上
优势
1. 本地cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度
2. 跨运营商的网络加速,保证不同网络的用户都能得到良好的访问质量
3. 远程访问用户根据DNS负载均衡技术只能选择cache服务器
4. 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点web服务器负载等功能
5. 广泛分布的cdn节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵
工作原理
1. 用户发起请求
2. 智能DNS的解析(根据IP判断地理位置、接入网类型、选择路由最短和负载最轻的服务器)
3. 取得缓存服务器ip
4. 把内容返回给用户(如果缓存中有,没有就执行5、6、7)
5. 向源站发起请求
6. 将结果返回给用户
7. 将结果存入缓存服务器
适用场景
1. 站点或者应用中大量静态资源的加速分发,例如css、js、图片和HTML
2. 大文件下载
3. 直播网站
独立图片服务器
必要性
1. 分担web服务器的I/O负载,将耗费资源的图片服务器分离出来,提高服务器的性能和稳定性
2. 能够专门对图片服务器进行优化,为图片服务器设置针对性的缓存方案,减少带宽成本,提高访问速度
3. 提高网站的可扩展性,通过增加图片服务器,提高图片吞吐能力
采用独立域名
原因:
1. 同一域名下浏览器的并发连接数有限制,突破浏览器连接数的限制
2. 由于cookie的原因,对缓存不利,大部分web cache都只缓存不带cookie的请求,导致每次的图片请求都不能命中cache
如何图片上传和同步
1. NFS共享方式
2. 利用FTP同步
动态语言静态化
将现有的PHP等动态语言的逻辑代码生成为静态的HTML文件,用户访问动态脚本重定向到静态HTML文件的过程。对实时性要求不高
原因:
1. 动态脚本通过会做逻辑计算和数据查询,访问量越大,服务器压力越大
2. 访问量大时可能会造成CPU负载过高,数据库服务器压力过大
3. 静态化可以减低逻辑处理压力,降低数据库服务器查询压力
实现方法
1. 使用模板引擎
2. 利用ob系列函数
需要获取swoole、workerman、TP、laravel、vue、Linux、redis以及性能优化,并发项目实战,微服务 架构方面的资料,可以私信我哦
6. 为什么 Laravel 会成为最成功最流行的 PHP 框架
Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速、安全地开发现代应用提供了必要的功能。
2011年,Taylor Otwell首次将Laravel带给这个世界,彼时,Laravel就是一个全新且现代的框架。Laravel基于MVC架构,可以满足诸如事件处理、用户身份验证等各种需求,同时通过包管理实现模块化和可扩展的代码,并且对数据库管理有着健壮的支持。
不管是专家还是新手,一旦接触到Laravel,都会有相见恨晚之感——这正是你在为PHP项目寻找的框架。本文我们将讨论为什么Laravel会成为最成功最流行的PHP框架。
模块化&可扩展性
Laravel是模块化和可扩展的,你可以在包含超过5500个程序包的Packalyst中找到你想要添加的任何代码。
微服务&API
Lumen是一个由Laravel衍生的专注于性能的微框架。使用Lumen提供的高性能API你可以更加简单快速地开发微型项目。Lumen使用最小的配置集成了Laravel的所有重要特性,你可以通过将代码复制到Laravel项目来实现框架的完整迁移。
<?php
$app->get('/', function() {
return view('lumen');
});
$app->post('framework/{id}', function($framework) {
$this->dispatch(new Energy($framework));
});
HTTP路由
Laravel拥有类似于Ruby on Rails的快速高效的路由系统。它可以让用户通过在浏览器上输入路径的方式让应用程序的各部分相关联。
Route::get('/', function () {
return 'Hello World';
});
HTTP中间件
Route::get('/', function () {
return 'Hello World';
});
Laravel可以通过中间件对应用进行保护——中间件会处理分析和过滤到达服务器的HTTP请求。你可以使用中间件来验证注册用户、避免跨站脚本攻击(XSS)以及其它安全问题。
<?php
namespace App\Http\Middleware;
use Closure;
class OldMiddleware {
public function handle($request, Closure $next) {
if ($request->input('age') <= 200) {
return redirect('home');
}
return $next($request);
}
}
缓存
Laravel提供了健壮的缓存系统,使用缓存可以让应用加载地更加快速,从而带来更好的用户体验。
Cache::extend('mongo', function($app) {
return Cache::repository(new MongoStore);
});
身份验证
安全是至关重要的。Laravel自带对本地用户的身份验证,并可以使用“remember” 选项来记住用户。此外你还可以引入一些额外参数,例如是否是活跃用户。
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1 ], $remember)) {
// The user is being remembered...
}
集成Stripe
Laravel Cashier可以满足你开发支付系统过程中所需要的任何需求。除此之外,它还同步并集成了用户身份验证系统。所以,你不再需要担心如何将计费系统集成到开发中了。
$user = User::find(1);
$user->subscription('monthly')->create($creditCardToken);
任务自动化
Elixir是一个让我们可以使用Gulp定义任务的Laravel API,我们可以使用Elixir定义预处理器来压缩CSS 和JavaScript。
elixir(function(mix) {
mix.browserify('main.js');
});
加密
一个安全的应用应该做到可以对数据进行加密。在Laravel中,可以使用OpenSSL和AES-256-CBC加密算法来满足你所有的加密需求。此外,所有的加密值都通过认证码进行签名以避免加密信息被篡改。
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
事件处理
Laravel应用中对事件的定义、记录和监听都非常便捷。服务提供者EventServiceProvider中的listen属性包含了应用中的所有事件列表。
protected $listen = [
'App\Events\PodcastWasPurchased' => [
'App\Listeners\EmailPurchaseConfirmation',
],
];
分页
在Laravel中分页非常简单,因为它能够根据用户在浏览器中的当前页生成一系列分页链接。
<?php
namespace App\Http\Controllers;
use DB;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function index() {
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);
}
}
对象关系映射(ORM)
Laravel包含了一个数据库处理层,其中的对象关系映射被称作Eloquent。另外这个对象关系映射也适用于PostgreSQL。
$users = User::where('votes', '>', 100)->take(10)->get();
foreach ($users as $user) {
var_mp($user->name);
}
单元测试
单元测试的开发是一个耗费大量时间的任务,但是它却保证了我们的应用能够正常工作,不出问题。Laravel使用PHPUnit进行单元测试。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase {
public function testBasicExample() {
$this->visit('/')->see('Laravel 5')->dontSee('Rails');
}
}
待办事项清单(Queue)
Laravel提供了在后台使用待办事项清单(to do list)处理复杂、漫长流程的选择,好吧,其实就是队列,队列可以让我们异步处理某些流程而不需要用户在加载页面时长时间的等待。
Queue::push ( new SendEmail ( $ message ));