Я использую phpredis в своей программе, что-то храню на сервере redis, получаю их, когда приходит один и тот же запрос (в тот же день), но я всегда получаю пустой результат. Кто-нибудь может дать мне немного просветления? Вот код класса Cache, который я использую:
<?php
class Cache
{
public static function getInstance()
{
static $instance = null;
null == $instance && $instance = new self();
return $instance;
}
protected function __construct()
{
}
protected function getR()
{
static $r = NULL;
if (NULL == $r) {
$r = new Redis();
try {
$r->pconnect(HOST, PORT, 5);
} catch(Exception $ex) {
//log
try {
$api->connect(HOST, PORT, 5);
} catch (Exception $ex) {
//log
}
}
}
return $r;
}
public function getValue($key)
{
$result = array();
$r = $this->getR();
if(!empty($r)) {
try{
$result = $r->hKeys($key);
$r->setTimeout($keys, 86400);
} catch (Exception $ex){
//log
}
}
return $result; // return true
}
public function setValue($key, $value)
{
$result = false;
$r = $this->getR();
if(!empty($r)) {
try{
$result = $r->hMset($key, $value);
} catch (Exception $ex){
//log
}
}
}
}
?>
РЕДАКТИРОВАТЬ:
Я проверил значения ключа с помощью redis-cli, нашел что-то связанное: данные значения ключа были сохранены в db 5, в то время как я думал, что они должны быть в DB 0 по умолчанию без оператора select, но программа получила db 0, конечно, ничего вернулся. Теперь мне интересно, почему данные пошли в БД 5, учитывая, что я не выбрал БД.
Наконец, я выяснил, что здесь произошло. До того, как я сохранил свою пару ключ-значение, был некоторый код, который также связывался с сервером Redis, и он явно выбрал DB 5, и по умолчанию БД моего подключения к Redis был затронут последний контекст, поэтому мои данные были сохранены в БД 5. По стечению обстоятельств, когда я хотел получить свои данные, последнее подключение к Redis использовало БД 0, конечно, я ничего не получил.
Других решений пока нет …