我在我的程序中使用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,当然没有回。现在我想知道为什么数据进入DB 5,因为我没有选择DB。
答案 0 :(得分:1)
最后,我已经弄明白这里发生了什么。在我存储我的键值对之前,有一些代码也与Redis服务器进行了通信,它已经明确选择了DB 5,,我的redis连接的默认数据库受到上一个上下文的影响,所以我的数据存储在DB 5中。巧合的是,当我想要检索我的数据时,最后一次redis连接使用了DB 0,当然我什么都没有。