laravel Cache 阅读心得
粗略阅读完 大概 知道几个东西
1.Store 接口 实际的操作缓存的接口
2.Repository 接口 个人感觉是Sotre代理接口
3 CacheManager 是代理类
举例
Cache::get()
1 门面类 实际就是找到Cache门面对应的实际名称 可以查询到 是 cache 相当于 mak(‘cache’)
2 然后 调用get方法 CacheManager里面get是私有的 所以只能看有没有魔术方法 发现有 那就执行呗
这个里面 有个store 方法
/**
* Get a cache store instance by name, wrapped in a repository.
*
* @param string|null $name
* @return \Illuminate\Contracts\Cache\Repository
*/
public function store($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return $this->stores[$name] = $this->get($name);
}
发现返回的是一个Repository类 这个类
protected function createFileDriver(array $config)
{
return $this->repository(new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null));
}
但是这个Repository类 依赖 一个实际的Store接口的实现
所以 调用get 方法 是通过调用Repository类的get方法
/**
* Retrieve an item from the cache by key.
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public function get($key, $default = null)
{
if (is_array($key)) {
return $this->many($key);
}
$value = $this->store->get($this->itemKey($key));
// If we could not find the cache value, we will fire the missed event and get
// the default value for this cache value. This default could be a callback
// so we will execute the value function which will resolve it if needed.
if (is_null($value)) {
$this->event(new CacheMissed($key));
$value = value($default);
} else {
$this->event(new CacheHit($key, $value));
}
return $value;
}
但是查看源码 Repository类的get方法 实际上还是调用的store里面的get方法 也就是说 Repository是store的代理 真正操作的还是store类

浙公网安备 33010602011771号