Viewing file: PredisCache.php (3.01 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Doctrine\Common\Cache;
use Predis\ClientInterface;
/** * Predis cache provider. * * @author othillo <othillo@othillo.nl> */ class PredisCache extends CacheProvider { /** * @var ClientInterface */ private $client;
/** * @param ClientInterface $client * * @return void */ public function __construct(ClientInterface $client) { $this->client = $client; }
/** * {@inheritdoc} */ protected function doFetch($id) { $result = $this->client->get($id); if (null === $result) { return false; }
return unserialize($result); }
/** * {@inheritdoc} */ protected function doFetchMultiple(array $keys) { $fetchedItems = call_user_func_array(array($this->client, 'mget'), $keys);
return array_map('unserialize', array_filter(array_combine($keys, $fetchedItems))); }
/** * {@inheritdoc} */ protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) { if ($lifetime) { $success = true;
// Keys have lifetime, use SETEX for each of them foreach ($keysAndValues as $key => $value) { $response = $this->client->setex($key, $lifetime, serialize($value));
if ((string) $response != 'OK') { $success = false; } }
return $success; }
// No lifetime, use MSET $response = $this->client->mset(array_map(function ($value) { return serialize($value); }, $keysAndValues));
return (string) $response == 'OK'; }
/** * {@inheritdoc} */ protected function doContains($id) { return (bool) $this->client->exists($id); }
/** * {@inheritdoc} */ protected function doSave($id, $data, $lifeTime = 0) { $data = serialize($data); if ($lifeTime > 0) { $response = $this->client->setex($id, $lifeTime, $data); } else { $response = $this->client->set($id, $data); }
return $response === true || $response == 'OK'; }
/** * {@inheritdoc} */ protected function doDelete($id) { return $this->client->del($id) >= 0; }
/** * {@inheritdoc} */ protected function doFlush() { $response = $this->client->flushdb();
return $response === true || $response == 'OK'; }
/** * {@inheritdoc} */ protected function doGetStats() { $info = $this->client->info();
return array( Cache::STATS_HITS => $info['Stats']['keyspace_hits'], Cache::STATS_MISSES => $info['Stats']['keyspace_misses'], Cache::STATS_UPTIME => $info['Server']['uptime_in_seconds'], Cache::STATS_MEMORY_USAGE => $info['Memory']['used_memory'], Cache::STATS_MEMORY_AVAILABLE => false ); } }
|