code: static public function buildCacheKey($columns = '*', array $conditionsAndOptions = []) {
          foreach ($conditionsAndOptions as &$value) {
              if ($value instanceof DbExpr) {
                  $value = $value->get();
              } else if (is_object($value)) {
                  throw new \InvalidArgumentException(
                      '$conditionsAndOptions argument may contain only strings and objects of class \PeskyORM\Core\DbExpr.'
                      . ' Object of class ' . get_class($value) . ' detected'
                  );
              }
          }
          unset($value);
          if (is_array($columns)) {
              foreach ($columns as &$value) {
                  if ($value instanceof DbExpr) {
                      $value = $value->get();
                  } else if (is_object($value)) {
                      throw new \InvalidArgumentException(
                          '$columns argument may contain only strings and objects of class \PeskyORM\Core\DbExpr.'
                          . ' Object of class ' . get_class($value) . ' detected'
                      );
                  }
              }
              unset($value);
          } else if ($columns instanceof DbExpr) {
              $columns = $columns->get();
          }
          return hash('sha256', json_encode(array($columns, $conditionsAndOptions)));
      }
docs: Cache key builder
  Override if you wish to change algorythm
  @param string|array $columns
  @param null|array|string $conditionsAndOptions
  @return string
  @throws \InvalidArgumentException