Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0d2ecbd

Browse files
[Cache] Finish Redis adapter
1 parent 4893cbc commit 0d2ecbd

File tree

3 files changed

+28
-39
lines changed

3 files changed

+28
-39
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ before_install:
5050
- if [[ $TRAVIS_PHP_VERSION = 5.* && ! $deps ]]; then (cd src/Symfony/Component/Debug/Resources/ext && phpize && ./configure && make && echo extension = $(pwd)/modules/symfony_debug.so >> $INI_FILE); fi;
5151
- if [[ $TRAVIS_PHP_VERSION = 5.* ]]; then pecl install -f memcached-2.1.0; fi;
5252
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo extension = ldap.so >> $INI_FILE; fi;
53+
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo extension = redis.so >> $INI_FILE; fi;
5354
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi;
5455
- if [[ $deps != skip ]]; then composer self-update; fi;
5556
- if [[ $deps != skip && $TRAVIS_REPO_SLUG = symfony/symfony ]]; then cp .composer/* ~/.composer/; composer global install --prefer-dist; fi;

src/Symfony/Component/Cache/Adapter/RedisAdapter.php

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,8 @@
1616
*/
1717
class RedisAdapter extends AbstractAdapter
1818
{
19-
/**
20-
* @var \Redis
21-
*/
2219
private $redis;
2320

24-
/**
25-
* @param \Redis $redisConnection
26-
* @param string $namespace
27-
* @param int $defaultLifetime
28-
*/
2921
public function __construct(\Redis $redisConnection, $namespace = '', $defaultLifetime = 0)
3022
{
3123
$this->redis = $redisConnection;
@@ -39,18 +31,13 @@ public function __construct(\Redis $redisConnection, $namespace = '', $defaultLi
3931
protected function doFetch(array $ids)
4032
{
4133
$values = $this->redis->mget($ids);
42-
4334
$index = 0;
4435
$result = [];
4536

4637
foreach ($ids as $id) {
47-
$value = $values[$index++];
48-
49-
if (false === $value) {
50-
continue;
38+
if (false !== $value = $values[$index++]) {
39+
$result[$id] = unserialize($value);
5140
}
52-
53-
$result[$id] = unserialize($value);
5441
}
5542

5643
return $result;
@@ -67,9 +54,11 @@ protected function doHave($id)
6754
/**
6855
* {@inheritdoc}
6956
*/
70-
protected function doClear()
57+
protected function doClear($namespace)
7158
{
72-
return $this->redis->flushDB();
59+
$this->redis->eval("for _,k in ipairs(redis.call('keys','{$namespace}*')) do redis.call('del',k) end");
60+
61+
return true;
7362
}
7463

7564
/**
@@ -87,21 +76,26 @@ protected function doDelete(array $ids)
8776
*/
8877
protected function doSave(array $values, $lifetime)
8978
{
90-
$failed = [];
91-
foreach ($values as $key => $value) {
92-
$value = serialize($value);
93-
94-
if ($lifetime < 1) {
95-
$response = $this->redis->set($key, $value);
96-
} else {
97-
$response = $this->redis->setex($key, $lifetime, $value);
79+
$failed = array();
80+
81+
foreach ($values as $id => $v) {
82+
try {
83+
$values[$id] = serialize($v);
84+
} catch (\Exception $e) {
85+
$failed[] = $id;
9886
}
87+
}
88+
89+
if (!$this->redis->mSet($values)) {
90+
return false;
91+
}
9992

100-
if (false === $response) {
101-
$failed[] = $key;
93+
if ($lifetime >= 1) {
94+
foreach ($values as $id => $v) {
95+
$this->redis->expire($id, $lifetime);
10296
}
10397
}
10498

105-
return count($failed) > 0 ? $failed : true;
99+
return $failed;
106100
}
107101
}

src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,23 @@
1414
use Cache\IntegrationTests\CachePoolTest;
1515
use Symfony\Component\Cache\Adapter\RedisAdapter;
1616

17+
/**
18+
* @requires extension redis
19+
*/
1720
class RedisAdapterTest extends CachePoolTest
1821
{
19-
/**
20-
* @var \Redis
21-
*/
2222
private static $redis;
2323

2424
public function createCachePool()
2525
{
26-
return new RedisAdapter($this->getRedis(), __CLASS__);
26+
return new RedisAdapter(self::$redis, str_replace('\\', '.', __CLASS__));
2727
}
2828

29-
private function getRedis()
29+
public static function setupBeforeClass()
3030
{
31-
if (self::$redis) {
32-
return self::$redis;
33-
}
34-
3531
self::$redis = new \Redis();
3632
self::$redis->connect('127.0.0.1');
3733
self::$redis->select(1993);
38-
39-
return self::$redis;
4034
}
4135

4236
public static function tearDownAfterClass()

0 commit comments

Comments
 (0)