laravel 基础教程 —— 缓存

OpenVINS实战指南:从环境搭建到RGB-D相机实时建图 本文提供了一份详细的OpenVINS实战指南,涵盖从Ubuntu与ROS环境搭建、依赖安装与编译调试,到连接RGB-D相机进行实时建图的完整流程。重点解决了RealSense D435i等设备的驱动配置、话题对齐及常见问题,并分享了传感器标定与性能优化技巧,帮助开发者快速实现稳定高效的视觉惯性里程计系统。 阅读详情

缓存

配置

Laravel 对多种缓存系统提供了统一的 API。缓存的配置文件存放在 config/cache.php。你可以在这个文件中指定整个应用默认使用何种缓存驱动。Laravel 支持当前主流的缓存系统如 Memcached 和 Redis。

缓存的配置文件也包含了一些额外的配置选项,这些选项在文件中都有文档注释,你应该确保自己已经读了这些选项注释。默认的,Laravel 配置使用 file 缓存驱动,该驱动会在文件系统中存储序列化的缓存对象。对于大型应用,建议使用内存级的缓存,如 Memcached 或者 APC。你甚至可以在 laravel 中配置多种缓存配置到相同的驱动。

缓存先决条件

数据库

当使用 database 缓存驱动时,你需要建立一个表来包含这些缓存项。你可以根据下面的 Schema 定义来建立表文件:

Schema::create('cache', function ($table) {
  $table->string('key')->unique();
  $table->text('value');
  $table->integer('expiration'); 
});

你也可以通过使用 php artisan cache:table Artisan 命令来生成正确的缓存表结构迁移。

Memcached

使用 Memcached 缓存需要安装 Memcached PECL package。

默认的配置基于 Memcached::addServer 使用 TCP/IP:

'memcached' => [
  [
    'host' => '127.0.0.1',
    'port' => 11211,
    'weight' => 100
  ]
],

你也可以使用 UNIX socket 路径来设置 host。如果你这么做,你需要设置 port 为 0:

'memcached' => [
  [
    'host' => '/var/run/memcached/memcached.sock',
    'port' => 0,
    'weight' => 100
  ],
],

Redis

在你使用 Redis 缓存之前,你需要先通过 Composer 安装 predis/predis。
关于更多的 Redis 配置信息,你可以参考 Laravel documentation page。

缓存使用

获取缓存实例

Illuminate\Contracts\Cache\Factory 和 Illuminate\Contracts\Cache\Repository 契约提供对 Laravel 缓存服务的访问。Factory 契约提供了应用中所有缓存驱动的定义。Repository 契约通常是一个基于你的 cache 配置文件所使用的默认缓存驱动的实现。

事实上,你也可以使用 Cache 假面,在这篇文档中,我们都是使用 Cache 假面进行举例。Cache 假面提供了一种方便简洁的方式来访问 Laravel 底层缓存契约的实现。

例如,让我们引入 Cache 假面到控制器:

<?php

namespace App\Http\Controllers;

use Cache;

class UserController extends Controller 
{
  /**
   * Show a list of all users of the application.
   *
   * @return Response
   */
   public function index()
   {
     $value = Cache::get('key');

     //
   }
}

访问多种缓存存储

你可以通过 Cache 假面的 store 方法来访问多种缓存存储。传递到 store 方法的 key 应该与你的 cache 配置文件中的 stores 配置项的列表之一相匹配:

$value = Cache::store('file')->get('foo');

Cache::store('redis')->put('bar', 'baz', 10);

获取缓存项

你可以通过使用 Cache 假面的 get 方法来从缓存中获取相关项的值。如果该项在缓存中并不存在,则返回 null 。如果你需要,你也可以传递第二个参数到 get 方法,这个参数所传递的值会在缓存中项不存在时被返回:

$value = Cache::get('key');

$value = Cache::get('key', 'default');

你甚至可以传递 Closure 作为默认值。如果缓存的项不存在,Closure 所返回的值将被做为默认值。传递闭包的方式可以使你从数据库或者其他外部服务中延迟获取默认值:

$value = Cache::get('key', function () {
  return DB::table(...)->get(); 
});

检查项是否存在

你可以使用 has 方法来检查缓存中是否存在该项:

if (Cache::has('key')) {
  //
}

递增/递减项中的值

你可以使用 increment 和 decrement 方法来调整缓存项目中的整型值。这两个方法都可以接受一个数组作为第二个参数来进行相应的数值调整:

Cache::increment('key');

Cache::increment('key', $amount);

Cache::decrement('key');

Cache::decrement('key', $amount);

检索或更新缓存中的项

有时候,你可能希望从缓存中检索出一个项目,但是当该项不存在的时候,你也想存储一个默认值到该项。比如,你希望从缓存中检索出一个用户。但是他并不存在,所以你需要从数据库中获取到他,然后添加到缓存中。你可以使用 Cache::remember 方法来做到这些:

$value = Cache::remember('users', $minutes, function () {
  return DB::table('users')->get(); 
});

如果缓存中没有检索到该项,传递到 remeber 方法中的闭包将会被执行并且其执行结果将会在缓存中进行替换。

你也可以合并 remember 和 forever 方法:

$value = Cache::rememberForever('users', function () {
  return DB::table('users')->get(); 
});

检索并删除

如果你需要检索一个项目,并在检索到的同时从缓存中删除该项,你可以使用 pull 方法。就像 get 方法一样,如果未检索到该项,将会返回 null :

$value = Cache::pull('key');

存储项目到缓存

你可以使用 Cache 假面的 put 方法来存储项目到缓存中。当你存储一个项到缓存中时,你需要指定一个该项需要被缓存的分钟值:

Cache::put('key', 'value', $minutes);

除了传递一个数值作为缓存过期的分钟值,你也可以通过传递一个 PHP DateTime 实例来设置缓存的失效时间:

$expiresAt = Carbon::now()->addMinutes(10);

Cache::put('key', 'value', $expiresAt);

add 方法只会在相应的项在缓存中不存在时才会被添加进缓存。该方法会在项目被添加到缓存后返回 true。否则返回 false:

Cache::add('key', 'value', $minutes);

forever 方法可以用来将项目永久的添加进缓存。该值只有手动的使用 forget 方法才能被移除:

Cache::forever('key', 'value');

从缓存中移除项目

你可以使用 Cache 假面的 forget 方法来从缓存中移除某项:

Cache::forget('key');

你可以使用 flush 方法来擦除所有的缓存:

Cache::flush();

擦除缓存并不会根据前缀来进行智能擦除,它会移除所有的缓存。所以如果你的应用和其他的应用共享缓存,你应该谨慎的使用该方法。

缓存标签

注意: 缓存标签并不支持 file 或者 database 缓存驱动。另外,对于将多种标签标记为永久存储的驱动,性能最好的是能够提供自动清除过期记录的驱动,比如 memcached。

存储标记了的项目到缓存

缓存标签允许你将相关的项目进行关联标记。并且允许一次性清除所有给定标签的缓存项。你可以通过有序的标签数组来访问被标记的缓存项目。比如,让我们访问被标记的项目并使用 put 方法来设置缓存值:

Cache::tags(['people', 'artists'])->put('John', $john, $minutes);

Cache::tags(['people', 'authors'])->put('Anne', $anne, $minutes);

事实上,你并没有被限制只使用 put 方法。你可以在标签中使用任意的缓存存储方法。

访问被标记的缓存项

为了访问被标记了的缓存项,你需要传递相应的有序列表到 tags 方法:

$john = Cache::tags(['people', 'artists'])->get('John');

$anne = Cache::tags(['people', 'authors'])->get('Anne');

你可以一次性的擦除分配的标记或者标记列表中的所有项。比如,你可以使用 flush 方法来删除所有的 people 和 authors 标签和两者组成的有序列标签里的所有缓存项。所以,Anne 和 John 都会被从缓存中移除:

Cache::tags(['people', 'authors'])->flush();

下面的语句将会作为上面语句的对照,将只会从缓存中删除 authors 标签的项目,所以 Anne 会被删除,而 John 被保留:

Cache::tags('authors')->flush();

添加自定义的缓存驱动

为了在自定义的缓存驱动中继承 laravel 的缓存。我们需要使用 Cache 假面的 extend 方法,该方法被用来绑定自定义缓存到底层管理中。通常这些都是在服务提供者中完成。

比如,注册一个新的缓存驱动并命名为 'mongo':

<?php

namespace App\Providers;

use Cache;
use App\Extensions\MongoStore;
use Illuminate\Support\ServiceProvider;

class CacheServiceProvider extends ServiceProvider
{
  /**
   * Perform post-registration booting of services.
   *
   * @return void
   */
   public function boot()
   {
     Cache::extend('mongo', function ($app) {
       return Cache::repository(new MongoStore);
     });
   }

   /**
    * Register bindings in the container.
    *
    * @return void
    */
    public function register()
    {
      //
    }
}

第一个被传递到 extend 方法中的参数应该是驱动的名称。这个名称应该和你的 config/cache.php 配置文件中的 driver 选项一致。而第二个参数是一个闭包,该闭包应该返回一个 Illuminate\Cache\Repository 的实现。在闭包中将会被传递一个 $app 实例,这个实例是 laravel 中的服务容器的实例。

Cache::extend 方法的调用应该在 App\Providers\AppServiceProvider 的 boot 方法中完成。或者你可以创建自己的服务提供者来存储这个扩展。但是不要忘记在 config/app.php 文件中进行注册。

为了创建我们自己的缓存驱动,我们首先需要实现 Illuminate\Constracts\Cache\Store 契约的接口。所以,我们的 MongoDB 缓存实现应该看起来像这样:

<?php

namespace App\Extensions;

class MongoStore implements \Illuminate\Contracts\Cache\Store
{
  public function get($key) {}
  public function put($key, $value, $minutes) {}
  public function increment($key, $value = 1) {}
  public function decrement($key, $value = 1) {}
  public function forever($key, $value) {}
  public function forget($key) {}
  public function flush() {}
  public function getPrefix() {}
}

我们仅仅需要使用 MongoDB 连接来实现这些方法。一旦我们的实现完成,我们就可以完成自己的缓存驱动的注册:

Cache::extend('mongo', function ($app) {
  return Cache::repository(new MongoStore); 
});

然后在 config/cache.php 配置文件中更新驱动为的名称 driver 为你的扩展的名称。

如果你在为自定义的缓存文件应该存放在哪里而疑惑,你可以考虑将其发布到 Packagist!或者,你可以在 app 目录中创建一个 Extensions 命名空间。事实上,你应该谨记,laravel 并不死板的限制你的目录结构,你应该可以根据自己的习惯自由的管理你的应用目录结构。

事件

如果你想在任何缓存被操作时执行额外的代码,你可能需要监听缓存的触发事件。通常的你应该存放这些事件监听器到你的 EventServiceProvider:

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
 protected $listen = [
  'Illuminate\Cache\Events\CacheHit' => [
    'App\Listeners\LogCacheHit',
  ],
  'Illuminate\Cache\Events\CacheMissed' => [
    'App\Listeners\LogCacheMissed',
  ],
  'Illuminate\Cache\Events\KeyForgotten' => [
    'App\Listeners\LogKeyForgotten',
  ],
  'Illuminate\Cache\Events\KeyWritten' => [
    'App\Listeners\LogKeyWritten',
  ],
 ];
如何入门强化学习 很多同学在入门强化学习的时候都会遇到困难,那我这里就简单介绍一下应该如何入门强化学习,并以开源代码为例详解强化学习实战。 阅读详情

相关推荐

高通ISP模块全解析:从Raw到JPEG的18个关键处理步骤(附避坑指南)

本文全面解析高通ISP模块从Raw到JPEG的18个关键处理步骤,涵盖原始数据预处理、色彩科学处理链、画质增强与降噪等核心环节。通过实战调优经验,揭示ISP架构中的技术原理与工程实践要点,帮助开发者避免常见问题,提升移动影像处理质量。

weixin_30399155的博客 358

laravel 一次对多个字段进行 increment 或者decrement 操作

第一种方法: 函数上是不支持的, 一定要一起操作的话,可以利用第三个参数曲线救国 : increment('detail_count', 1, ['num'=>DB::raw('num + 1')]) ; 实测通过! 看一下laravel的increment方法:D:\phpStudy\WWW\xxx\vendor\laravel\framework\src\Illuminate...

weixin_41981080的博客 5933

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南

本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。

weixin_29173777的博客 343

laravel 数据的自增和自减

laravel 的DB操作的自增和自减 最近遇到一个坑,那就是laravel相加或相减,如果此数据没有的时候就会报错,思前想后找了很多,总算是找到了自增和自减的方法了 increment自增 increment自增方法有两个参数: 1.第一个为必填,代表要对数据表的哪个字段进行自增操作 2.第二个参数为可选,如果为空则表示每次增加1,如果填写了5,则表示每次在原有的基础上增加5。 DB方法 # 自增1的方法 DB::table('order')->where('num', $num)->in

lo6064200的博客 2677

【重要内容】敬告读者

由于优快云近期将要搞事情,此专栏建议已购买的用户将内容保存到本地。尚未购买的用户请待9月1日后再决定是否需要购买。如此规则上线,本人将会关闭此专栏。并寻找其他渠道进行发布。

魔落的博客 910

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5264

Laravel+Redis 数据缓存

Laravel+Redis 数据缓存

weixin_49494410的博客 880

SAP 合并报表(EC-CS)完整方法论 + 全业务操作步骤

SAP合并报表(EC-CS)方法论与操作指南摘要 SAP EC-CS模块提供完整的集团合并解决方案,其核心方法论基于会计准则和集团管控逻辑,通过6大维度构建标准化合并体系:组织架构标准化、数据采集标准化、外币换算规则化、内部交易自动化抵消、股权与商誉规范化、报表出具灵活化。 实施过程分为两个阶段: 上线前配置阶段(12个步骤):包括合并架构搭建、科目表配置、外币规则设定、抵消规则定义等基础工作 日常操作阶段(10个步骤):涵盖数据报送、外币换算、内部对账、自动抵消、调整分录等月结流程 系统优势包括: 支持多

金牌架构师 1364

【防重】API接口重复提交

在一定的时间内多次请求同一接口,同一参数。由于请求是健康请求,会执行正常的业务逻辑,从而产生大量的废数据。

DreamSun的博客 1972

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1035

【AI智能体】Dify集成 Echarts实现数据报表展示实战详解

Dify集成 Echarts 实现智能数据报表集成与展示实战详解

congge 5961

php redis 传递闭包,laravel 基础教程 —— 缓存

缓存配置Laravel 对多种缓存系统提供了统一的 API。缓存的配置文件存放在 config/cache.php。你可以在这个文件中指定整个应用默认使用何种缓存驱动。Laravel 支持当前主流的缓存系统如 Memcached 和 Redis。缓存的配置文件也包含了一些额外的配置选项,这些选项在文件中都有文档注释,你应该确保自己已经读了这些选项注释。默认的,Laravel 配置使用 file 缓...

weixin_39789094的博客 255

Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)

在第一个脉冲期间,天线 1 通过天线 N-1 接收的杂波返回与第二个脉冲期间天线 2 通过天线 N 接收的杂波返回相同。该算法可能需要搜索角度和多普勒的所有组合来定位目标,但对于示例,由于确切知道目标的位置,因此可以将处理器定向到该点。然而,接收到的信号不仅包含来自目标的反射回波,还包含来自被照亮地表的回波。然而,由于干扰器的白噪声性质,接收到的干扰信号占据了整个多普勒频段。在以下部分中,您将模拟来自目标、杂波和干扰器的返回,并说明 STAP 技术如何过滤来自接收信号的干扰。假设元件间距是波形波长的一半。

珞瑜的博客 7135

Laravel框架的缓存操作

在上述代码中,driver 表示缓存驱动,不同的缓存系统需要通过驱动类来让Laravel 进行存取,在Laravel 中已经内置了 file 驱动,path用于配置缓存文件的保存路径。需要注意的是,这些方法在不同的缓存驱动中可能会有一些细微的差异,但在大多数情况下,它们都会有相同的行为。与 put 方法不同,forever 方法会将值永久地存储在缓存中,直到手动删除或清除缓存。如果缓存键不存在,add 方法会将指定的值存储在缓存中,并且可以设置一个过期时间。如果缓存键已经存在,put 方法会覆盖原有的值。

yqh1561641819的博客 2563

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Laravel之缓存

简介 PHP缓存包括PHP编译缓存和PHP数据缓存两种。PHP是一种解释型语言,属于边编译边运行的那种。这种运行模式的优点是程序修改很方便,但是运行效率却很低下。PHP编译缓存针对这种情况做改进处理,使得PHP语言只要运行一次,就可以把程序的编译结果缓存起来。这样,接下来的每次运行都不需要再次编译了,这大大提高PHP运行速度。 在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器。当你执行...

珞羽飘凌个人博客 4048

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

laravel篇之缓存

简介 PHP缓存包括PHP编译缓存和PHP数据缓存两种。PHP是一种解释型语言,属于边编译边运行的那种。这种运行模式的优点是程序修改很方便,但是运行效率却很低下。PHP编译缓存针对这种情况做改进处理,使得PHP语言只要运行一次,就可以把程序的编译结果缓存起来。这样,接下来的每次运行都不需要再次编译了,这大大提高PHP运行速度。 在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器。当你执...

李澎昆的博客 2088

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Laravel 清理缓存 - 命令

使用laravel命令清除laravel程序缓存, 立马获取/达到想要效果.

"代码"的日常搬运 1万+

laravel cache缓存

laravel为不同的缓存系统提供了统一的api,缓存配置位于文件目录(config/catche.php) 主要的方法: Cache::put() Cache::get() Cache::add() Cache::pull() Cache::forever() Cache::forget() Cache::has() 系统默认是文件缓存,缓存的目录位于,storage/framwork/cache/data 使用cache之前要先在控制器文件里引用, (1)设置缓存 语法: put: Cache::

qq_45844648的博客 7811

清除laravel缓存命令

清除Laravel(终端)中的缓存 登录运行laravel应用程序的系统并打开终端。然后导航到Laravel应用程序代码。在这里,就可以使用以下命令来清除缓存: 1、清除应用程序缓存 运行以下命令以清除Laravel应用程序的应用程序缓存 1 $ php artisan cache:clear 2、清除路由缓存 要清除Laravel应用程序的路由缓存,请从shell执行以下命令。 1 $ php artisan route:

wang_kailiang的专栏 8017

laravel的响应及缓存功能

在laravel中,相应正常情况下有2个类型:常规的直接响应,另外一个是ajax的响应。 其中展示视图以及直接响应字符串都属于常规的响应。 1.1 常规响应: 展示视图:return view('welcome'); 直接返回某个字符串:return 'hello world'; 1.2 ajax请求的响应 语法:return response() -> json(需要json输出的数据); // 数据是数组格式,对象也可以 例:创建一个路由,访问对应的页面之后,获取member表信息,页面输

瑾的日常 2677

laravel中的缓存文件_通过速度比较在Laravel中进行缓存

laravel中的缓存文件Caching is one aspect of web development I am guilty of overlooking a lot and I am sure a lot us are guilty of that too. I have come to realize how important it is and I will explain the ...

culiu9261的博客 2062

laravel 缓存

laravel缓存

a1720417545的博客 1258

Laravel框架中缓存操作

缓存操作 Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于 config/cache.php。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 目前支持主流的缓存后端如 Memcached 和 Redis 等。 主要方法: Cache::put() Cache::get() Cache::add() Cache::pull() Cache::forever() Cache::forget() Cache::has() 系统默认是使用文件缓存,其缓存文件存储的位置位于(s

Cure The World的博客 2758

laravel cache 缓存操作

laravel为不同的缓存系统提供了统一的ap...

wgchen 1万+

Laravel使用Redis缓存

文章目录前言安装Redis安装php_redis扩展安装predis/predisLaravel缓存相关配置验证 前言 Laravel默认使用文件(file)存储缓存,但同时提供了其他多种存储介质,其中固然包含Redis。从安装到配置再到验证步骤较多,在此记录一下。 基于Windows系统 安装Redis 下载地址:https://github.com/tporadowski/redis/releases 选择安装包(msi)或压缩包(zip)下载,下载后安装包打开选择安装路径即可,zip则直接解压即可

Microven 1384

laravel缓存html,laravel 生成页面静态缓存

page-cache 绝对是一个了不起的神器,可能在访问应用后生成完整的 html 静态页面,再通过配置 nginx,下次访问时就可以直接读取静态页面,让你的站点速度快到飞起,完全可以构建成一个全静态化站点,再结合 vue 就可以有很好的交互体验安装$ composer require silber/page-cache注册到中间件 app/Http/Kernel.phpprotected $mi...

weixin_30311521的博客 1178
上一篇: Android实战项目中常用依赖库整理
下一篇: PHP使用Guzzle依赖实现对外部接口封装
dwf_学海无涯
博客等级 码龄10年 42粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值