首页 > 代码库 > Phalcon中的model Forcing Cache(模型强制缓存)小坑

Phalcon中的model Forcing Cache(模型强制缓存)小坑

跟着phalcon官方文档走到模型强制缓存时候,老发生一个错误 : Cache didn‘t return a valid resultset .

原话的意思是,缓存没有返回一个 有效的结果集。

modelsCache如下:

/**
* @return Redis
*/
public function getModelCache()
{
$frontend = new Json([
"lifetime" => $this->config->Model->lifetime,
]);

return new Redis($frontend, [
"host" => $this->config->Model->host,
"port" => $this->config->Model->port,
"persistent" => false,
"statsKey" => $this->keysListName,
"index" => $this->config->Model->database,
]);
}
看了下github上的源代码:

let cache = this->_dependencyInjector->getShared(cacheService);
if typeof cache != "object" {
                  throw new Exception("Cache service must be an object");
}

let result = cache->get(key, lifetime);
if result !== null {

               if typeof result != "object" {
                                  throw new Exception("Cache didn‘t return a valid resultset");
              }

result->setIsFresh(false);

......

当缓存返回的结果不为对象时,就会抛出此异常,值得注意的是使用json,base64等加密类处理之后返回的数据已经丢失原本的类信息。因此会出错。因此可以用自带的Data类,来加解密数据。Data类使用的加解密是PHP的serialize和unserialize.不会丢失原数据信息。

Phalcon中的model Forcing Cache(模型强制缓存)小坑