Cache缓存 Memcached、redis、pac

  • laravel 缓存配置文件
# 配置文件在 config/cache.php 文件中
//> 默认缓存驱动 CACHE_DRIVER 如果没设置使用 file 文件缓存
'default' => env('CACHE_DRIVER',‘file’),
//> 缓存类型
'stores' => [
      //> php 扩展 缓存
      'apc' => [
          'driver' => 'apc',  
      ],
      //> 数组作为缓存存储
      'array' => [
          'driver' => 'array'
      ],
      //> 数据库作为缓存存储
      'database' => [
          'driver' => 'database',
          'table' => 'cache',  //> 缓存数据表名cache(如果没表前缀时)
      ],
      //> 文件缓存
      'file' =>  [
          'dirver' => 'file',
          //> 文件缓存位置 在 storage/framework/cache目录下
          'path' => storage_path('framework/cache'),
      ],
      //> memcached 缓存
      'memcached' => [
            'driver' => 'memcached',
            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
            'sasl' => [
                env('MEMCACHED_USERNAME'),
                env('MEMCACHED_PASSWORD'),
            ],
            'options' => [
                // Memcached::OPT_CONNECT_TIMEOUT  => 2000,
            ],
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    //> 当前端口权重(memcached是支持分布式所以可以配置多台服务器)
                    'weight' => 100,
                ],
            ],
      ],
      //> redis 缓存 
      'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
      ],
    ],
//> 缓存前缀 这里的前缀在redis软件中默认是 laravel: 
'prefix' => 'laravel',
];
  • array、file、database、apc缓存
array :作为缓存一般用于调数数据时
file :作为缓存一般叫常用
database :作为缓存需要迁移一张cache数据表(参看手册)
apc :作为缓存需要打开扩展(作者百度得知(apc在5.6没有安装扩展,改为apcu扩展安装))
  • apcu (apc) 扩展在win上面安装 并 使用
    apcu – 扩展
    • 注意:1. 安装时对应当前php版本信息下载对应的apcu扩展安装
    • 注意:2. php_apcu.dll添加在php/ext目录下(并在php/php.ini中添加extensions=php_apcu.dll即可)
  • 在linux上安装:查看其它文档
  • 关于redis的安装参看win-php-扩展文档
  • 关于memcached在win上是不支持的(win上支持memcache,但是Laravel框架又不支持memcache)(这里占时不测试)
    //> – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
# Cache 缓存使用
Cache::get('name','default');  //> 获取缓存里面name键值 (第二个参数使用默认值)
    # get()方法的第二个参数支持一个闭包函数(用于返回一个默认值)
Cache::put('name','value',$min);  //> 设置缓存里面值为name、值为value、第三个参数时间
# store():方法设置缓存类型(store设置当前缓存驱动)
Cache::store('redis')->get('name');
# has($key):判断当前key值是都在缓存中存在
$this->store->has('name');  //> 使用契约时
  • 操作整数 (自增、自减)(对于记录点记录等叫常用)
# 自增(默认值每次加 1 ; 我们可以设置value值,设置每次自加多少)
Cache::increment($key,$value = 1);
# 自减 (默认值每次减1 ; 我们也可以设置value值)
Cache::decrement($key,$value = 1);  
# deccrement(自减有什么用?比如:我们在设置限制当前用户的登录次数时,可以使用)
# remember('key',$min,$callback):获取指定的key值,如果key值不存在使用闭包函数返回值插入key->返回值到缓存中
$this->cache->remember('name',60*24,function(){ return //> 返回值; });
# forever($key,$value):存储一个键值(过期时间:永久 )(相比于put而言就是时间是永久的)
# rememberForever($key,$callback):结合remember()和forever()两个方法不难得出(该方法的作用是:如果$key不在缓存中存在,那么存储$callback的返回值到缓存中(过期时间:永久))
# pull($key,$default):从缓存中获取$key对应的值,并在缓存中删除当前key值(如果key不存在,返回一个默认值null(或者自己设置一个默认返回值default))
# get($key,$default) :用法也是获取key值,也是存在就返回指定key对应的值(否则返回默认值null(当然可以设置默认返回值))(唯一区别在于:get获取后不会从缓存中删除指定的key值)
put()方法的过期时间:除了可以填写一个分钟数之外,还可以填写一个当前的Carbon实例
put('name','value',1):name=value; 过期时间1分钟后
put('name','value',Carbon::now()->addMinutes(10)); //> 过期时间10分钟后
# add('key','value',$minutes):当key不在当前缓存里面时,添加缓存数据
$this->cache->add('name','value',1); //> 当name不在当前缓存里面时,添加缓存name=value值过期时间是1分钟
  • 清空缓存
# forget($key):从当前缓存中移除指定的key值对应的缓存数据
# flush() :从当前缓存中移除所有数据(如果当前缓存中存在其他项目缓存数据时,请谨慎使用,该方法)
  • Cache 契约
# 如果注入该契约的话(将不能操作store方法(切换底层缓存类型)(也不能操作tags缓存标签))
# 1. Cache ===> Illuminate\Contracts\Cache\Repository
# 如果注册该缓存则可以操作store方法
# 2. Cache::driver() ===> Illuminate\Contracts\Cache\Factory
$this->cache->store('redis')->get(name'');
  • 使用缓存标签(file和database缓存驱动不支持)(Memcached驱动使用标签缓存性能最佳)
# 使用标签缓存tags()
$this->cache->store('redis')->tags(['pe','ex'])->put('one','one',Carbon::now()->addMinutes(10));
$this->cache->store('redis')->tags(['pe','wc'])->put('tow','tow',Carbon::now()->addMinutes(10));
# 获取添加缓存标签的数据,必须加上对应的标签才能访问到对应的数据
$this->cache->store('redis')->tags(['pe','ex'])->get('one');  //> 这里能得到
$this->cache->store('redis')->get('tow');  //> 这里得不到指定的tow对应的数据
# 删除打上标签的数据
$this->cache->store('redis')->tags('pe')->flush(); //> 删除标签包含pe的缓存数据
$this->cache->store('redis')->tags([''pe','ex''])->flush(); //> 清除打上pe或ex缓存的所有数据
    原文作者:余生无解
    原文地址: https://www.jianshu.com/p/6b6b405b5b07
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞