I wonder how safe it is to use Laravel 4 built-in DB query caching mechanism ($query->remember(10)).
I can't find in the docs the implementation way, and, I wonder if it uses some kind of hashing algorithm of the full DB query with all the binded (bonded??) values, in order to set the cached item key (Which is safe enough for me :))
I also wonder if the implementation differs from one cache driver to another. I currently use the file system driver.
If you look at the source
#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;
}
You can see the remember
method uses a cacheKey
object property. This property is set in the getCacheKey
method
#File: laravel/framework/src/Illuminate/Database/Query/Builder.php
public function getCacheKey()
{
return $this->cacheKey ?: $this->generateCacheKey();
}
Which uses the generateCacheKey
method to create the cache key.
public function generateCacheKey()
{
$name = $this->connection->getName();
return md5($name.$this->toSql().serialize($this->getBindings()));
}
Here you can see that Laravel generates the cache key by using an md5
hash of
The Connection Name
The SQL Query
A PHP serialized version of the data bindings (i.e. "all the binded (bonded??) values")
This key generation is independent of the cache engine used.