Laravel 4缓存机制实现

Laravel 4 caching mechanism implementation

我想知道使用 Laravel 4 内置数据库查询缓存机制 ($query->remember(10)) 有多安全。

我在文档中找不到实现方式,而且,我想知道它是否使用某种哈希算法 具有所有绑定(绑定??)值的完整数据库查询,以便设置缓存的项目键(这对我来说足够安全:))

我还想知道不同缓存驱动程序的实现是否不同。我目前使用的是文件系统驱动。

如果你看源码

#File: laravel/framework/src/Illuminate/Database/Query/Builder.php
public function remember($minutes, $key = null)
{
    list($this->cacheMinutes, $this->cacheKey) = array($minutes, $key);

    return $this;
}

您可以看到 remember 方法使用了一个 cacheKey 对象 属性。这个属性设置在getCacheKey方法

#File: laravel/framework/src/Illuminate/Database/Query/Builder.php
public function getCacheKey()
{
    return $this->cacheKey ?: $this->generateCacheKey();
}

它使用 generateCacheKey 方法创建缓存键。

public function generateCacheKey()
{
    $name = $this->connection->getName();

    return md5($name.$this->toSql().serialize($this->getBindings()));
}

在这里您可以看到 Laravel 使用

md5 哈希生成缓存键
  1. 连接名称

  2. SQL查询

  3. 数据绑定的PHP序列化版本(即"all the binded (bonded??) values")

此密钥生成与使用的缓存引擎无关。