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
哈希生成缓存键
连接名称
SQL查询
数据绑定的PHP序列化版本(即"all the binded (bonded??) values")
此密钥生成与使用的缓存引擎无关。
我想知道使用 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
哈希生成缓存键
连接名称
SQL查询
数据绑定的PHP序列化版本(即"all the binded (bonded??) values")
此密钥生成与使用的缓存引擎无关。