我想知道使用Laravel 4内置数据库查询缓存机制($ query-> remember(10))是多么安全。
我在文档中找不到实现方式,并且,我想知道它是否使用完整数据库查询的某种散列算法和所有绑定(绑定??)值,为了设置缓存的项目密钥(这对我来说足够安全:))
我也想知道实现是否因缓存驱动程序而异。我目前使用文件系统驱动程序。
答案 0 :(得分:1)
如果你看一下来源
#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序列化版本(即“所有绑定(绑定??)值”)
此密钥生成独立于所使用的缓存引擎。