php Redis Serialize 설정
TL;DR
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
일단 아래의 코드를 보자
<?php $redis = new Redis(); try { $redis->connect('127.0.0.1','6379', 2.5, NULL, 150); $key = 'myKey'; $value = array('v1' => 'Value1', 'v2' => 'Value2'); $ttl = 10; $redis->setex( $key, $ttl, $value ); $value = $redis->get($key); var_dump($value); } catch(Exception $e) { var_dump($e); } $redis->close(); ?>
위에 코드를 실행했을 때 나오는 결과는
string(5) "Array"
가 나오게 된다. 우리가 예측한 Array가 아닌 말그대로 타입이 Array인 String이 나오게 된다.
예전 redis에선 자동으로 Array를 설정해 준것같은데, 최근 php redis에서는 따로 serialize를 해주어야 하는것 같다.
$redis->_serialize(), $redis->_unserialize()
를 사용해서 Array을 value로 넣을 때 일일히 넣어줘도 좋지만,
실제 개발 환경에서 그러기는 쉽지 않다.
이때 자동으로 serialize를 해주는 옵션을 설정하면 알아서 Array를 serialize해 넣어주게 된다.
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
위 옵션을 활성화 시킨 상태에서 Array를 set한뒤 get을 하게 되면 예상대로 Array변수가 반환되어 사용이 가능하다.
Result Code
<?php $redis = new Redis(); try { $redis->connect('127.0.0.1','6379', 2.5, NULL, 150); $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); $key = 'myKey'; $value = array('v1' => 'Value1', 'v2' => 'Value2'); $ttl = 10; $redis->setex( $key, $ttl, $value ); $value = $redis->get($key); var_dump($value); } catch(Exception $e) { var_dump($e); } $redis->close(); ?>
OutPut
array(2) { ["v1"]=> string(6) "Value1" ["v2"]=> string(6) "Value2" }