Laravel 为各种后端缓存提供丰富而统一的 API,而其配置信息位于 config/cache.php 文件中,Laravel 默认使用 file 缓存驱动,将序列化的缓存对象保存在文件系统中。

1 Redis的配置

这里仅探讨redis缓存配置的一些内容

1.1 安装PRedis

PRedis是PHP访问redis的扩展包,只需要下载原码即可,不需要安装PHP扩展(如php-redis.so)。我们使用composer安装

composer require predis/predis 1.0.*

1.2 配置

  • 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储。
  • 当你在执行命令 php artisan cache:clear 的时候,会把 Session 也连带清除了,导致所有用户需要重新登录。
  • 我们的目的是让缓存,也就是默认的 Redis 存储到 0 号数据库,Session 存储在 1 号数据库。('database' => 0,'database' => 1)

1.2.1 配置redis数据库

应用的Redis配置位于config/database.php,你可以基于环境随意修改该数组,只需要给每个Redis服务器一个名字并指定该Redis服务器使用的主机和接口。

'redis' => [

    'cluster' => false,

    //默认的redis服务器
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
], //供session使用的
'session' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
], //配置更多的redis服务器... ],

1.2.2 更改session的配置

  • 方式1 修改 config/session.php
 'driver' => env('SESSION_DRIVER', 'redis'),  //指定session使用的方式
  • 方式2 开发环境下可以修改 .env 文件的配置
SESSION_DRIVER=redis

测试一下,执行以下命令后检查下是否退出登录:

php artisan cache:clear

1.2.3 更改cache配置

修改config/cache.php 文件

'default' => env('CACHE_DRIVER', 'redis'),

'stores' => [
'apc' => [
'driver' => 'apc',
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache'),
],
// 其它一些配置省略了...
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
],

分析:

  • 配置文件
//config/database.php文件 配置redis连接

// config/session.php文件 更改session方式
'driver' => env('SESSION_DRIVER', 'redis') //config/cache.php文件 更改缓存方式
'default' => env('CACHE_DRIVER', 'redis')
  • .env文件
CACHE_DRIVER=file
SESSION_DRIVER=redis REDIS_HOST=192.168.1.248
REDIS_PASSWORD=null
REDIS_PORT=6379

.env可以方便的配置我们的开发环境,但是正式环境建议更改对应配置文件

1.3 使用redis

我们可以在Redis门面上以静态方法的方式调用Redis客户端提供的任何命令( Redis命令大全 ),然后Laravel使用魔术方法将命令传递给Redis服务器并返回获取的结果。

使用前提是引入Redis门面

use Illuminate\Support\Facades\Redis;

一些基本使用

Redis::set('key','value');  //存入redis
Redis::get('key'); //获取redis中的值
Redis::lLen('key'); //队列的长度
Redis::rpop('key'); //右侧出队列
Redis::rpush('key','value'); //右侧存入队列
Redis::exists($key) //redis是否存在这个键

2 缓存的使用

你可以使用 Cache facade 来访问缓存

// 通过store方法访问各种缓存存储
$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 10); // 从缓存中获取数据
$value = Cache::get('key');
$value = Cache::get('key', 'default');
// 你甚至可以传递 Closure 作为默认值。如果指定的数据不存在于缓存中,将返回 Closure 的结果
$value = Cache::get('key', function () {
return DB::table(...)->get();
}); // 确认项目是否存在
Cache::has('key') // 递增与递减值,第二个可选参数,用来指示要递增或递减值的数量
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount); // 有时你可能想从缓存中找出一个数据,而当在请求的数据不存在时,程序能为你存储默认值
$value = Cache::remember('users', $minutes, function () {
return DB::table('users')->get();
}); // 使用 rememberForever 方法从缓存中查找数据或永久存储它
$value = Cache::rememberForever('users', function() {
return DB::table('users')->get();
}); // 从缓存中获取到数据之后再删除它,和 get 方法一样,如果缓存中不存在该数据, 则返回 null
$value = Cache::pull('key'); // put 方法来将数据存储到缓存中,你需要使用第三个参数来设定缓存的过期时间:
Cache::put('key', 'value', $minutes);
// 除了以整数形式传递过期的分钟数,还可以传递一个 DateTime 实例来表示该数据的过期时间:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt); // 只存储没有的数据, 果存放成功返回 true ,否则返回 false :
Cache::add('key', 'value', $minutes); // 数据永久存储,这些缓存数据不会过期,所以必须通过 forget 方法从缓存中手动删除它们:
Cache::forever('key', 'value'); // 删除缓存中数据
Cache::forget('key'); // 清空所有缓存,慎用
Cache::flush();

还可以使用cache辅助函数

$value = cache('key');

cache(['key' => 'value'], $minutes);

cache(['key' => 'value'], Carbon::now()->addSeconds(10));

3. 缓存标记

缓存标记并不支持使用 file 或 database 的缓存驱动。

1.写入

所谓的缓存标记,就是对缓存的数据打上相关的标记,以便清空所有被分配指定标记的缓存值。你可以通过传入标记名称的有序数组来为缓存数据写入标记。

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

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

2.访问

若要获取一个被标记的缓存数据,请将相同的有序标记数组传递给 tags 方法,然后调用 get 方法来获取你要检索的键:

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

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

3.移除

你可以清空有单个标记或是一组标记的所有缓存数据。例如,下面的语句会删除被标记为 people、authors 或两者都有的缓存。所以,Anne 与 John 都会从缓存被删除:

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

相比之下,下面的语句只会删除被标记为 authors 的缓存,所以 Anne 会被移除,但 John 不会:

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

laravel5.5缓存系统的更多相关文章

  1. Memcache缓存系统构建一

    在如今这个高效率的社会中,怎样将这个高效率应用到自己的程序中,是一个值得追寻和值得探讨的问题.因为这个memcache能够很好的提高检索速度,提升用户体验,而且重要的是减少数据库的访问.这就大大的提高 ...

  2. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  3. 深入探讨在集群环境中使用 EhCache 缓存系统

    EhCache 缓存系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider. 下图是 EhCache 在应用 ...

  4. Memcached 数据缓存系统

    Memcached 数据缓存系统 常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html Memcached是一个自由开源的,高性能,分布式内存对 ...

  5. jQuery源码解读 - 数据缓存系统:jQuery.data

    jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据 ...

  6. 分布式缓存系统Memcached简介与实践

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  7. Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  8. 第十七课:js数据缓存系统的原理

    这一章主要讲的是jQuery的缓存系统的历史发展,以及他自己的框架的缓存系统的实现.都是源码解析. 我就挑几个重点讲下: (1)jQuery的缓存机制的原理 jQuery的缓存机制实现的原理是在元素中 ...

  9. 高性能的分布式内存对象缓存系统Memcached

    Memcached概述   什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...

随机推荐

  1. Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)

    project 编译问题,需要三处的jdk版本要保持一致,才能编译通过. 1.在项目上右键properties->project Facets->修改右侧的version  保持一致 2. ...

  2. COGS 146. [USACO Jan08] 贝茜的晨练计划

    ★☆   输入文件:cowrun.in   输出文件:cowrun.out   简单对比时间限制:1 s   内存限制:32 MB 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运 ...

  3. 通过CSS3实现:鼠标悬停图片360度旋转效果

    效果很好玩,代码很简单: 效果: 鼠标放置在图片上:360度顺时针旋转 鼠标离开图片:图片260度逆时针旋转 只要将下面代码拷贝过去,并将图片改成你想要的就可以看到效果 <!doctype ht ...

  4. BZOJ 3090: Coci2009 [podjela]

    3090: Coci2009 [podjela] Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 23  Solved: 17[Submit][Statu ...

  5. Vue--父组件传数据给子组件,子组件生命周期过程拿到数据的情况

    需求: 在子组件渲染之前,我要修改数据的某个字段 结果是 组件在beforeUpdate,updated 的状态才能拿到父组件的数据 那么证明,我根本无法在beforeUpdate,updated两个 ...

  6. OpenMP常用函数

    1.设置线程数目 定义如下: void omp_set_num_threads(int num_threads); 通过该函数来指定其后用于并行计算的线程数目,其中参数num_threads就是指定的 ...

  7. git 提交 src refspec master does not match any

    git init 产生的目录解释   error: src refspec master does not match any. 引起该错误的原因是,目录中没有文件,空目录是不能提交上去的 error ...

  8. 统一项目中编码风格(Eclipse Java code format、codetemplate)

    在公司内的日常开发过程中,除了需要遵守统一的编码规范之外,还需要对编写的代码做统一的格式化,Eclipse提供了格式化编码的工具,快捷键是:Ctrl+Shift+F. 为了统一项目组的代码风格,建议使 ...

  9. NPM 学习笔记整理

    NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...

  10. Jenkins搭建CI/CD

    所需Jenkins插件: Maven Integration pluginPublish Over SSHSSH plugin 1.配置全局工具 配置JDK: 配置Git: 配置maven: 2.创建 ...