Yii2.0 缓存机制 - 文件缓存 - FileCache

FileCache 顾名思义就是文件缓存,把需要缓存的数据用文件的形式保存起来。

至于用法也很简单,更详细的还是移步Yii2缓存的官方文档

在 Yii2 框架中配置 FileCache :

'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
        # 'cachePath' => '@runtime/cache2',// 可以指定文件夹
    ],
]


所有缓存组件都有同样的基类 yii\caching\Cache ,为了统一接口,Yii2将所有类型的缓存都统一成以下这些方法:

get():通过一个指定的键(key)从缓存中取回一项数据。 如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
set():将一个由键指定的数据项存放到缓存中。
add():如果缓存中未找到该键,则将指定数据存放到缓存中。
getOrSet():返回由键指定的缓存项,或者执行回调函数,把函数的返回值用键来关联存储到缓存中, 最后返回这个函数的返回值。
multiGet():由指定的键获取多个缓存数据项。
multiSet():一次存储多个数据项到缓存中,每个数据都由一个键来指明。
multiAdd():一次存储多个数据项到缓存中,每个数据都由一个键来指明。 如果某个键已经存在,则略过该数据项不缓存。
exists():返回一个值,指明某个键是否存在于缓存中。
delete():通过一个键,删除缓存中对应的值。
flush():删除缓存中的所有数据。

下面给出一些例子:

# 加载缓存组件
$cache = Yii::$app->cache;

# 增加一个缓存
$cache->add('url', 'https://caohongyuan.cn');

# 增加/更改一个缓存
$cache->set('url', 'https://www.caohongyuan.cn');

# 获取缓存内容
$cache->get('url');

# 查看缓存是否存在
$cache->exists('url');
# 同时增加多个缓存
$cache->multiAdd(['name' => 'chy', 'url' => 'https://caohongyuan.cn']);

# 同时增加/更改多个缓存
$cache->multiSet(['name' => 'chy', 'url' => 'https://caohongyuan.cn']);

# 同时获取多个缓存
$cache->multiGet(['name', 'url']);

# 获取或者增加缓存
$cache->getOrSet('url', function ($value) {
    return $value;
});

# 删除一个缓存
$cache->delete('url');

# 清除所有的缓存文件
$cache->flush();

我这就不做打印操作了。


除了上述操作外,其实还有更实用的操作,当然能理解 FileCache 的原理才是最重要的。比如:过期时间?文件位置?下面简单说下:

1、增加缓存的时候增加过期时间,判断过期原理:

官方的文档写着:

public boolean add($key, $value, $duration = 0, $dependency = null)

其中第三个参数就是时间,单位为,如下例子:

$cache->set('url', 'https://caohongyuan.cn', 5);
$data = $cache->get('url');
var_dump($data);die;
// https://caohongyuan.cn

再等5秒后,打印的结果为:false。

假如没有设置第二个参数,那么 Yii2.0 框架默认的时间是一年,那些说时间无限的都是骗人的,看下图框架源码:

image.png

这时候有同学就会好奇能不能知道过期时间是多少?看上图中的框架源码:

return @touch($cacheFile, $duration + time());

新建的文件的时候,把过期时间直接设置在了文件时间上里了,所以判断是否过期直接判断文件的上次修改时间了,至于怎么获取,后面有时间再去考虑。

2、文件地址,多层文件创建和内容读取:

$cache = Yii::$app->cache;
var_dump($cache->cachePath);// 在runtime/cache文件夹下

如新建个缓存:

$cache->set('url', 'https://caohongyuan.cn');
$data = $cache->get('url');

文件地址:

image.png

文件内容:

image.png

其实,我们可以注意到第四个参数 $dependency,这个参数就是来控制文件层次的,如下:

$cache->directoryLevel = 2;
$cache->set('url', 'https://caohongyuan.cn');
$data = $cache->get('url');

看下文件:

image.png

至于.bin 的文件怎么命名的,看下源码大家就懂了:

image.png

至于文件夹的名字估计就是key的名字来的。

3、比如在清除缓存文件的时候,只想清除已经过期的文件,而不是清除所有:

# 清除缓存时间过期的文件
$cache->gc(true);

不要问原因了,源码中有...

4、如果怕重名,其实也可以加前缀:

$cache = Yii::$app->cache;
$cache->keyPrefix = "chy_";
$cache->set('url', 'https://caohongyuan.cn');

文件展示如下:

image.png


其实,关于过期还与依赖相关,这里就不多讲了。

好了,先就那么多。

本文链接地址,转载请标注: https://caohongyuan.com/article/141


3

上一篇: Sublime 选中所有相同变量快捷键

下一篇: PHP 缓存,分析文件缓存、memcache、memcached和Redis

提交 清空
Re: