版权属于:
桑帅东的博客
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
Laravel8.77.1 预设了:Apc, Array, File, Database, Memcached, Null, Redis, Taggable 多种缓存的具体实现方案,以常用的 Redis 为例,Illuminate\Cache\RedisStore 就是 redis 缓存服务实现,查看其源代码:
<?php
namespace Illuminate\Cache;
use Illuminate\Contracts\Cache\LockProvider;
use Illuminate\Contracts\Redis\Factory as Redis;
use Illuminate\Redis\Connections\PhpRedisConnection;
class RedisStore extends TaggableStore implements LockProvider
{
}
可见,该 Redis 缓存功能类,需要实现一个 Store 的接口,这个接口就是 Illuminate\Contracts\Cache\LockProvider ,在 Laravel 中称之为契约,看该 Cache 契约的实现:
<?php
namespace Illuminate\Contracts\Cache;
interface LockProvider
{
/**
* Get a lock instance.
*
* @param string $name
* @param int $seconds
* @param string|null $owner
* @return \Illuminate\Contracts\Cache\Lock
*/
public function lock($name, $seconds = 0, $owner = null);
/**
* Restore a lock instance using the owner identifier.
*
* @param string $name
* @param string $owner
* @return \Illuminate\Contracts\Cache\Lock
*/
public function restoreLock($name, $owner);
}
接口契约中定义了关于缓存应该具备的方法,这样在缓存操作时,无论文件,Redis 或者 Apc 缓存,都具有了统一的接口,不用担心使用上的语法差异了。
说了这么多,其实就是操作上的抽象层,将需要的操作提取,保证所有驱动实现具有统一的结构。这就是接口的常规目的,Laravel 中叫成了契约而已,没有特殊功能。
评论