set在redis中成功执行但什么也没得到

时间:2014-09-30 09:39:00

标签: php redis

我在我的程序中使用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。

1 个答案:

答案 0 :(得分:1)

最后,我已经弄明白这里发生了什么。在我存储我的键值对之前,有一些代码也与Redis服务器进行了通信,它已经明确选择了DB 5,,我的redis连接的默认数据库受到上一个上下文的影响,所以我的数据存储在DB 5中。巧合的是,当我想要检索我的数据时,最后一次redis连接使用了DB 0,当然我什么都没有。